Trying to get property of non-object

Eléphant du PHP | 363 Messages

09 mai 2012, 10:53

Bonjour,

On m'a livré un script et une base mais dans certains cas j'ai un : Trying to get property of non-object.

J'ai pour habitude de dire un script marche ou pas, c'est du binaire, donc est-il probable que ça vienne des données en base ?

Autrement, est-il possible de masquer l'erreur ? au même titre qu'un @ devant une fonction php ?

D'avance merci.

Fé.
Dis-donc fossoyeur, t'as une dent contre moi ou quoi ?

ViPHP
ViPHP | 2577 Messages

09 mai 2012, 11:45

Cacher les problèmes ne les résout pas.
Il faut que tu regardes dans le script l'objet qui provoque l'erreur (fichier et ligne indiquée dans le message) puis que tu trouves ou l'objet devait être créer normalement. A partir de la, tu dois comprendre pourquoi il n'a pas été créé et modifier le programme en conséquence pour le créer ou pour ne pas l'utiliser s'il n'est pas créé.

Eléphant du PHP | 363 Messages

09 mai 2012, 12:36

Ravie de ton aide Mazarini.

Je suis d'accord avec toi. Cacher ne résout rien...mais l'idée, pour le moment, est de masquer l'erreur pour des raisons esthétiques en attendant que je trouve la solution. C'est possible ça ?

Apparemment le script s'appuie sur une variable vide ($varTemp->Num)

Du coup les conditions qui suivent ne peuvent être vérifiées...

Fé.
Modifié en dernier par foetus69 le 09 mai 2012, 14:27, modifié 2 fois.
Dis-donc fossoyeur, t'as une dent contre moi ou quoi ?

ViPHP
ViPHP | 2577 Messages

09 mai 2012, 13:26

tu peux regarder du coté de la fonction is_object : http://php.net/manual/fr/function.is-object.php
et faire les tests uniquement si la variable est un objet.

Eléphant du PHP | 363 Messages

10 mai 2012, 18:48

Salut !

Merci ca m'aide grandement :)

J'avais une question à 2 sous pour toi ?

Comment se passe le séquencement de plusieurs webservices ?

Je m'explique C dépend de B qui lui même dépend de A :

étape 1 : webservice A interrogé
étape 2 : réponse du webservice A
étape 3 : webservice B interrogé
étape 4 : réponse du webservice B
étape 5 : webservice C interrogé
étape 6 : réponse du webservice C

Que se passe t-il si B plante en étape 3 ou 4 ?

Autre question, est-ce que l'étape 5 peut répondre avant les étapes précédentes pour une raison ou une autre ? Quelle(s) raison(s) d'ailleurs ?

Féfé
Dis-donc fossoyeur, t'as une dent contre moi ou quoi ?

ViPHP
xTG
ViPHP | 7331 Messages

10 mai 2012, 18:50

Bah j'ai envie de dire que ça dépend de ce que tu passes d'un webservice à l'autre...
Si B a besoin de A pour renvoyer quelque chose il va de soit qu'on va rien demander à B si A n'a pas répondu correctement...

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

14 mai 2012, 05:36


Comment se passe le séquencement de plusieurs webservices ?

Je m'explique C dépend de B qui lui même dépend de A :

étape 1 : webservice A interrogé
étape 2 : réponse du webservice A
étape 3 : webservice B interrogé
étape 4 : réponse du webservice B
étape 5 : webservice C interrogé
étape 6 : réponse du webservice C

Que se passe t-il si B plante en étape 3 ou 4 ?

Autre question, est-ce que l'étape 5 peut répondre avant les étapes précédentes pour une raison ou une autre ? Quelle(s) raison(s) d'ailleurs ?
L'étape 5 ne peux "répondre" avant les autres.
PHP étant séquentielle il déroule le script de haut en bas. Donc d'abord A puis B et enfin C, et ceci sans concurrence (tu ne lance pas de "thread" concurrent.

Pour le gestion des erreurs c'est un cas à prévoir et les blocs try/ catch servent à cela, tu peux faire un bloc par webservice et dans le catch tu ajoute le message d'erreur à un tableau d'erreur que tu affiche ensuite.

@+
Il en faut peu pour être heureux ......