IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

[POO] Réassigner objet, dans l'objet


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2007
    Messages : 144
    Par défaut [POO] Réassigner objet, dans l'objet
    Bonjour,

    Petite question...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    class Divers {
     
      public function __construct() {
     
      }
     
      public function changement() {
        // Du traitement...
        // Puis...
        $this = new Divers();
      }
     
    }
    Problème, j'ai une erreur : "Fatal error: Cannot re-assign $this".

    Bref, comment procéder pour réassigner mon objet dans une même méthode de celui ? Je sais que c'est tordu et paradoxal lol mais j'aurais besoin de faire ça...

    Merci pour votre aide,
    Evocatii

  2. #2
    Membre émérite Avatar de FCYPBA
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    745
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 745
    Par défaut
    Salut,

    En toute logique, cela me semble impossible à faire au sein l'objet lui-même. ( et c'est d'ailleurs logique que tu obtiennes une erreur.)

    Expose nous plutôt comment tu en es arrivé à ce choix car il doit y avoir un autre solution.

    Dans le pire des cas, tu fais une fonction de RAZ au sein de la classe pour repartir avec un objet tout neuf

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2007
    Messages : 144
    Par défaut
    Hello ! Merci pour ta réponse !

    Alors, il s'agit d'une classe permettant de gérer des fichiers.

    Un fichier étant constitué de deux attributs :

    - un nom
    - un répertoire

    et pouvant effectuer diverses actions.

    Certains de ces actions créent de nouveaux attributs si besoin est (extension, chemin ou adresse).

    Le problème se pose quand j'utilise la fonction "renommer" : l'attribut "nom" change et il me faut alors réinitialiser certains attributs de l'objet (extension, chemin et adresse) qui deviennent erronés. Je voulais le faire en recréant l'objet à partir de la classe mais ce n'est pas possible. Bien entendu, je pourrais simplement résoudre le problème avec des unset() spécifiques, mais je voulais savoir comment j'aurais pu faire autrement.

    Je précise que cette classe est expérimentale, c'est juste pour le fun et essayer des trucs pour comprendre le fonctionnement des objets. Donc je voulais simplement savoir s'il était possible de réassigner un objet dans l'objet, et apparemment ce n'est pas le cas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public function renommer($nouveauNom) {
        rename($this->creerChemin(), str_replace($this->nom, $nouveauNom, $this->creerChemin()));
        $this = new Fichier($this->repertoire, $nouveauNom);
      }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    class Fichier {
     
      public $nom;
      public $repertoire;
     
      public function __construct($nom, $repertoire) {
        $this->nom = $nom;
        $this->repertoire = $repertoire;
      }
     
      public function creerAdresse() {
     
        if (!isset($this->adresse)) {
          $this->adresse = 'http://' . $_SERVER['SERVER_NAME'] . '/' . $this->repertoire . '/' . $this->nom;
        }
     
        return $this->adresse;
     
      }
     
      public function creerChemin() {
     
        if (!isset($this->chemin)) {
          $this->chemin = $_SERVER['DOCUMENT_ROOT'] . '/' . $this->repertoire . '/' . $this->nom;
        }
     
        return $this->chemin;
     
      }
     
      public function creerExtension() {
     
        if (!isset($this->extension)) {
          $this->extension = self::obtenirExtension($this->nom);  
        }
     
        return $this->extension;
     
      }
     
      public function renommer($nouveauNom) {
        rename($this->creerChemin(), str_replace($this->nom, $nouveauNom, $this->creerChemin()));
        $this = new Fichier($this->repertoire, $nouveauNom);
      }
     
      public function supprimer() {
        unlink($this->creerChemin());
        unset($this);
      }
     
      public static function obtenirExtension($nom) {
        preg_match('/.+\.(.+)$/', $nom, $resultats);
        return $resultats[1];
      }
     
      public static function verifierNom($nom) {
        if (preg_match('/.+\..+$/', $nom)) {
          return true;
        } else {
          return false;
        }
      }
     
    }

  4. #4
    Membre Expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Par défaut
    La réassignation pourrait se faire dans une fonction statique.
    Tu peux étudier le design pattern du singleton qui utilise un principe similaire.
    Ca, c'est pour la technique.

    Pour la raison fonctionnelle, je trouve ton souhait un peu tordu. Mais ce n'est qu'un avis.

Discussions similaires

  1. [XML] Lire un OBJET dans un OBJET dans un ARRAY
    Par Irokoi dans le forum Bibliothèques et frameworks
    Réponses: 4
    Dernier message: 24/05/2013, 14h53
  2. PopupMenu : Compter le nombre d'objets dans un objet
    Par bionicleman dans le forum Débuter
    Réponses: 5
    Dernier message: 15/10/2008, 11h38
  3. Réponses: 2
    Dernier message: 20/06/2007, 12h12
  4. Créer un objet dans un objet
    Par poussinphp dans le forum C++
    Réponses: 6
    Dernier message: 10/07/2006, 15h18
  5. objet dans un objet
    Par adri_thi dans le forum Langage
    Réponses: 4
    Dernier message: 29/06/2006, 17h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo