2009-07-23 7 views
5

J'ai rencontré un comportement très étrange dans certains de nos codes PHP aujourd'hui. Nous avons une classe pour traiter les fichiers. Il est quelque chose comme ceci:mot réservé non-listé?

class AFile { 

//usual constructor, set and get functions, etc. 
//... 

    public function save() { 
    //do some validation 
    //... 

    if($this->upload()) { //save the file to disk 
     $this->update_db(); //never reached this line 
    } 
    } 

    private function upload() { 
    //save the file to disk 
    //... 
    return ($success) ? true : false; 
    } 
} 

Il nous a semblé assez normal, mais le $ this-> fonction upload() ne sont jamais retournés quoi que ce soit, mais NULL. Nous avons vérifié que la fonction correcte était en cours d'exécution. Nous avons répercuté sa valeur de retour avant son retour. Nous avons essayé seulement de retourner une vraie valeur ou même une chaîne. Tout allait bien. Mais $ this-> upload est toujours évalué à NULL. De plus, il n'y avait rien dans les journaux et ERROR_ALL est activé.

Dans l'exaspération, nous avons changé le nom de la fonction à foo_upload. Tout à coup tout a fonctionné. "upload" ne figure pas dans la liste des PHP reserved words. Quelqu'un at-il des idées pour lesquelles une fonction de classe nommée "upload" échouerait?

+0

Avez-vous mis un écho dans la fonction de téléchargement? –

+0

Pourrait-il être remplacé quelque part? – Greg

+0

@Chacha: Nous avons mis un écho dans la fonction de téléchargement. Il a donné les valeurs attendues. @Greg: la classe AFile n'a pas d'enfants (pour le moment) donc ses méthodes ne doivent pas être écrasées. – dnagirl

Répondre

1

Une façon d'obtenir nulle quand « appeler » le téléchargement serait si vous aviez cette (en essayant d'accéder à une propriété inexisting):

if($a = $this->upload) { // => NULL 
    $this->update_db(); //never reached this line 
} 
var_dump($a); 

au lieu de cela (de OP) (essayez d'appeler une méthode existante):

if($a = $this->upload()) { // => true or false 
    $this->update_db(); //never reached this line 
} 
var_dump($a); 

avez-vous vérifié que vous ne l'avez pas oublié le ()?

Si ce n'est pas, essayez avec error_reporting mis à E_ALL, et l'affichage des erreurs:

ini_set('display_errors', true); 
error_reporting(E_ALL); 

(vous avez dit « ERROR_ALL est », donc pas sûr que ce que vous vouliez dire)

+0

désolé, je voulais dire error_reporting (E_ALL). Les parenthèses sont présentes et il n'y a aucun objet vars avec le même nom. Nous avons essayé d'attraper le résultat de $ this-> upload() dans un $ var comme vous le suggérez. Cela n'a pas fait de différence. – dnagirl

+0

ok :-(vraiment intéressé de connaître la réponse, alors! –

2

Assurez-vous que l'instruction return à la fin de la méthode de téléchargement est la seule déclaration de retour de cette méthode.

+0

C'est ... Mais c'est un très bon point. – dnagirl

Questions connexes