2009-01-21 6 views
1

Je reçois un "Appel à une fonction membre process_data() sur un non-objet dans page.class.php sur la ligne 35" même si l'objet a été appelé.Problème possible d'objet multi-instance dans PHP

est ici l'extraction de index.php montrant l'objet instantised

// require our common files 
require("modules/module.php"); 
require("registry/objects/datetime.class.php"); 
require("registry/objects/page.class.php"); 


// load in all the objects 
$datetime = new dateandtime; 
$page = new page; 
$module = new module; 

Il passe ensuite à la classe Process

 require("template.class.php"); 
     $template = new template($php_path . "controllers/themes/adm/" . $page . ".html"); 

     // Place in both commonly used language and page specific language 
     $template->language($php_path . "controllers/language/en/adm/common.php"); 
     $template->language($php_path . "controllers/language/en/adm/" . $page . ".php"); 

     // Tell the page's module to load in data it needs 
     $module->process_data("module_" . $page); 

     // Output the final result 
     $template->output(); 

Il est à ce moment PHP jette l'erreur. Le contenu du fichier module.php est la suivante

class module { 

    public function process_data ($child) { 
     require($child . ".php"); 
     read_data(); 
     return true; 
    } 
} 

J'ai essayé de déplacer la déclaration d'instance à l'intérieur du second code collé, mais qui génère plus d'erreurs, parce que la classe qui appelle « module » dans les utilisations puis certaines des classes «modèles» aussi - le même problème se produit juste en bas de la ligne. Qu'est-ce que je me trompe, ou complètement manquant, je suis sûr que c'est le dernier mais j'ai vraiment besoin d'aide ici. Merci

Répondre

0

Il me semble que la variable $ module n'était pas dans la portée lorsque vous essayez d'appeler la méthode de l'objet. Pourriez-vous essayer var_dump ($ module) avant $ module-> process_data ("module_". $ Page). Quel est le résultat de cette fonction? La solution rapide peut être de déclarer $ module global, mais les globals ne sont pas une très bonne idée de toute façon (mais vous pouvez vérifier si cela fonctionne).

+0

var_dump a effectivement renvoyé une valeur nulle. J'avais essayé global auparavant et cela n'a pas résolu le problème. J'ai lu la documentation sur les objets et les classes, mais cela ne m'a pas éclairé; certainement personne avec des problèmes à travers plusieurs fichiers/classes. – jakeisonline

+0

mais si vous déclarez variable $ module global dans le premier fichier, et que vous écrivez global $ module; var_dump ($ module); Qu'est ce que tu obtiens? encore nul? – empi

+0

Bingo! N'a pas besoin de la déclaration globale dans le premier fichier, mais en ajoutant global $ module; var_dump ($ module); juste avant l'utilisation de l'objet semble avoir très bien fonctionné. Quelle est l'explication ici. Comme maintenant cela a donné la même erreur pour un objet différent, dans le fichier suivant appelé. – jakeisonline