#'!*%@!?#!!** de saloperie de *!!#¡@* de PHP de m*@#*!

#'!*%@!?#!!** de saloperie de *!!#¡@* de PHP de m*@#*! - PHP - Programmation

Marsh Posté le 07-04-2010 à 18:04:35    

Bonjour  :cry: ,
 
J'arrive pas à me débarrasser de cette cochonnerie de duo notice + erreur:
 

Notice: Trying to get property of non-object in [...] on line 69
 
Fatal error: Call to a member function myFunction() on a non-object in [...] on line 69


 
Voilà ce qu'il y a à la ligne 69:
 

Code :
  1. $myClass->myVar->myFunction();


 
$myClass est une variable comprenant une instance d'une classe comprenant une variable public $myVar, comprenant elle-même une instance d'une classe qui offre la méthode myFunction().
 
Pourquoi ça marche pas ?
 
Merci par avance de votre généreuse aide.

Reply

Marsh Posté le 07-04-2010 à 18:04:35   

Reply

Marsh Posté le 07-04-2010 à 18:26:20    

fais un  
 

Code :
  1. var_dump($myClass)

Message cité 1 fois
Message édité par stealth35 le 07-04-2010 à 18:26:32
Reply

Marsh Posté le 07-04-2010 à 19:16:48    

C'est pourtant clair non?

Call to a member function myFunction() on a non-object


 [:petrus75]  
 
Tu veux pas que ça te corrige l'erreur automatiquement aussi ?

Reply

Marsh Posté le 07-04-2010 à 20:13:32    

stealth35 a écrit :

fais un

 
Code :
  1. var_dump($myClass)



Merci bien, j'ai résolu le problème.

 

un var_dump retournait NULL, du coup le problème était en fait beaucoup plus simple, $myClass était vide au moment où j'essayais de l'utiliser...

 

comment ça se fait ? bien en fait cette ligne était appelée indirectement depuis la partie __construct() de cette même classe, et donc j'imagine que PHP laisse la variable vide tant que l'instanciation n'est pas terminée (cf. l'excution de __construct et de tout ce que __construct appelle). Bref, il a fallu mettre le code qui appelle la ligne 69 dans une deuxième méthode de la classe (constructPart2() - et que j'appelle après avoir créé l'instance, une fois que la variable est correctement assignée...)

 

bref, PHP pourrait s'améliorer sur ce point.

 

merci en tous cas.

 
Alisteroid a écrit :

C'est pourtant clair non?

Call to a member function myFunction() on a non-object


 [:petrus75]

 

Tu veux pas que ça te corrige l'erreur automatiquement aussi ?


Oui, c'est tellement clair que le problème n'avait absolument rien à voir avec le message. [:jblover]

Message cité 1 fois
Message édité par GPT2 le 07-04-2010 à 20:14:10
Reply

Marsh Posté le 08-04-2010 à 09:23:40    

Deux choses :
 
- Apprend à écrire un titre explicite. Tu t'imagine ce que donnerai ce forum si tout le monde créait des topics comme le tiens?
- Le commentaire de sebondus était tout à fait justifié. Le problème est totalement lié à ce qu'il a dit. Pas de sa faute si tu étais à côté de la plaque :
 

Citation :


Call to a member function myFunction() on a non-object


 
ça veut dire : Tu essaies d'appeler une fonction (myFunction()) sur un variable n'était pas en objet. Pourquoi ça? Parce que $myClass était vide. De ce fait $myClass->myVar était nul. Donc appeler null->myFunction() est invalide => PHP gueule.
 
Donc conclusion : PHP a beau être un langage de merde, c'est pas sa faute si tu sais pas lire ses messages d'erreur.


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 08-04-2010 à 11:09:07    

GPT2 a écrit :


Merci bien, j'ai résolu le problème.

 

un var_dump retournait NULL, du coup le problème était en fait beaucoup plus simple, $myClass était vide au moment où j'essayais de l'utiliser...

 
GPT2 a écrit :


Oui, c'est tellement clair que le problème n'avait absolument rien à voir avec le message. [:jblover]


En effet  [:petrus75]

 

Montre ton code, y a forcément une erreur de conception, tu as l'air d'avoir "bidouillé" pour contourner cette erreur .

Message cité 1 fois
Message édité par SuperKebab le 08-04-2010 à 11:10:37
Reply

Marsh Posté le 08-04-2010 à 11:59:47    

SuperKebab a écrit :


En effet  [:petrus75]  
 
Montre ton code, y a forcément une erreur de conception, tu as l'air d'avoir "bidouillé" pour contourner cette erreur .


Code :
  1. if ($myClass !== null)
  2. {
  3.  $myClass->myVar->myFunction();
  4. }


 [:oh shi-]

Reply

Marsh Posté le 08-04-2010 à 16:06:23    

!is_null(), c'est pas mal comme fonction aussi :/ Ou même empty()...


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 08-04-2010 à 16:09:53    

Pour moi le is_null() ou l'opérateur revient exactement au même.
 
Mais peut-être que tu as un bon argument pour l'utiliser à la place de l'opérateur ?

Reply

Marsh Posté le 08-04-2010 à 16:18:37    

Le risque de se tromper entre != et !== et, éventuellement, la lisibilité...


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 08-04-2010 à 16:18:37   

Reply

Marsh Posté le 08-04-2010 à 17:42:26    

Pas bête en effet pour le risque de se tromper. Lisibilité je suppose que c'est une affaire de goût, je préfère l'opérateur :)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed