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 :

L'instanciation de la classe ne se fait pas [POO]


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 497
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 497
    Billets dans le blog
    1
    Par défaut L'instanciation de la classe ne se fait pas
    Bonjour,

    débutant en POO, je ne vois pas ce qui va pas.
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    use ticket_rawsrc\model\license\table\Application;
     
    class CSVImportController
    {
        ...
        private $data = [];
        private $ref_application;
     
     public function invoke ()
        {
         ...
         $this->ref_Application = new Application( $this->data['sesaid'], $this->data['applicationname'],
                $this->data['platform'], $this->data['platformowner'], $this->data['publisher']);
         ...

    classe Application :
    Code php : 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
    class Application extends JobClass
    {
     
        public $platform;
        public $platformowner;
        public $publisher;
        public $accepted_characters_for_application_name;
        public $errors = [];
        static  $warnings = [];
     
        public function __construct( $sesaid, $applicationname, $platform, $platformowner, $publisher ) {
            parent::__construct( $sesaid, $applicationname ); /*pour que la propriété accepted_characters de la classe
     parente soit connue par une fille, il faut que celle-ci appelle le constructeur de la parente.*/
            $this->platform = $platform;
            $this->platformowner = $platformowner;
            $this->publisher = $publisher;
            $this->accepted_characters_for_application_name = "has forbidden characters. Please use only letters and underscore";
     
        }

    Bien que la classe Application soit chargée (présence d'un autoloader) et que tous les arguments qu'on lui passe existent (confirmé par XDEBUG), la propriété $ref_application reste vide. Pourquoi ?

    XDEBUG me confirme que toutes les propriétés de la classe Application sont affectées.

  2. #2
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 497
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 497
    Billets dans le blog
    1
    Par défaut
    J'ai pensé qu'il valait mieux déclarer $ref_application en public, vu que c'est le constructeur de la classe Application qui l'affecte et de plus, j'ai remplacé le constructeur par un code simplissime :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public function __construct()
        {
     
        }
    mais ça suffit pas. $this->ref_Application reste NULL...

  3. #3
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 699
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 699
    Par défaut
    si ref_Application est vide c'est certainement que la méthode invoke n'a pas encore été appelée.
    je ne vois pas l'appel de cette méthode dans votre code.

  4. #4
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 497
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 497
    Billets dans le blog
    1
    Par défaut
    Merci pour la réponse mais qui malheureusement ne fournit pas la réponse : je suis dans une architecture MVC, et la méthode invoke est appelée par le routeur :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $controller = new $routes[$action];
    $controller->invoke($data);
    Il s'agit d'un contrôleur, comme toutes les classes gérées par le routeur. (Ce routeur (écrit par rawsrc quand il était encore là) suppose l'existence d'une méthode invoke dans tous les contrôleurs. Du reste, pour m'assurer de l'appel du new, j'ai placé un affichage juste avant et je le vois bien...
    Du reste, le contrôleur de Application est appelé vu que les actions sont effectuées.

  5. #5
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 529
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 529
    Par défaut
    Bonjour,

    Question bête, ce n'est pas une erreur de majuscule minuscule ? $ref_application; et $this->ref_Application; ?

  6. #6
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 497
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 497
    Billets dans le blog
    1
    Par défaut
    Merci pour ta question pas si bête que ça car je n'avais pas remarqué.


    Maintenant, $ref_Application existe ; apparemment, y a un autre bug, mais j'avance...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 21/04/2006, 20h18
  2. Réponses: 2
    Dernier message: 21/04/2006, 14h32
  3. instanciation d'une classe
    Par firejocker dans le forum C++
    Réponses: 6
    Dernier message: 15/11/2005, 11h54
  4. Réponses: 7
    Dernier message: 10/11/2005, 10h09
  5. [VB.NET] Instanciation objet (sur class perso.)
    Par DaxTaz dans le forum ASP.NET
    Réponses: 4
    Dernier message: 03/05/2004, 11h07

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