PHP中可能存在的多实例对象问题
我得到了一个“对第35行page.class.php中非对象的成员函数process_data()的调用”,即使该对象已被调用 下面是index.php提取,显示正在实例化的对象PHP中可能存在的多实例对象问题,php,class,object,instantiation,Php,Class,Object,Instantiation,我得到了一个“对第35行page.class.php中非对象的成员函数process_data()的调用”,即使该对象已被调用 下面是index.php提取,显示正在实例化的对象 // require our common files require("modules/module.php"); require("registry/objects/datetime.class.php"); require("registry/objects/page.class.php"); // load
// 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;
然后将其传递给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();
在这一点上,PHP抛出了错误。module.php文件的内容如下
class module {
public function process_data ($child) {
require($child . ".php");
read_data();
return true;
}
}
我已经尝试将实例声明移动到第二个粘贴的代码中,但这会产生更多错误,因为“模块”调用的类也会使用一些“模板”类,所以同样的问题会发生在后面
我到底是看错了她,还是完全错过了,我肯定是后者,但我真的需要帮助。谢谢在我看来,当您尝试调用对象方法时,变量$module似乎不在范围内。您可以在$module->process_data(“module_u”)($page)之前尝试var_dump($module)。这个函数的结果是什么?快速解决方案可能会声明$module global,但globals无论如何都不是一个好主意(但您可以检查它是否有效)。var\u dump确实返回了null。我以前尝试过global,但这并没有解决问题。我已经阅读了关于对象和类的文档,但它并没有启发我;当然,没有人会在多个文件/类之间出现问题。但是,如果在第一个文件中声明变量$module global,并在第一个文件中编写全局$module;变量转储($模块);你得到了什么?还是空的?答对了!在第一个文件中不需要全局声明,但添加了全局$module;变量转储($模块);就在使用该对象之前,它似乎工作得很好。有什么解释。现在,在下一个被调用的文件中,这为不同的对象给出了相同的错误。问题在变量范围内,而不是在类声明或其他任何内容中。在文件中声明变量(在任何函数之外)时,其作用域仅限于该单个文件。如果要在其他文件中使用它,则必须将其声明为全局变量。从类本身(在任何函数之前)声明该全局变量,还是在调用对象之前将其保留为全局变量,这是更好的做法?