Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/232.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP中可能存在的多实例对象问题_Php_Class_Object_Instantiation - Fatal编程技术网

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

我得到了一个“对第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 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;变量转储($模块);就在使用该对象之前,它似乎工作得很好。有什么解释。现在,在下一个被调用的文件中,这为不同的对象给出了相同的错误。问题在变量范围内,而不是在类声明或其他任何内容中。在文件中声明变量(在任何函数之外)时,其作用域仅限于该单个文件。如果要在其他文件中使用它,则必须将其声明为全局变量。从类本身(在任何函数之前)声明该全局变量,还是在调用对象之前将其保留为全局变量,这是更好的做法?