【问题标题】:Possible Multi-Instanced Object Problem in PHPPHP 中可能的多实例对象问题
【发布时间】:2009-01-21 16:32:45
【问题描述】:

我在第 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;
    }
}

我尝试将实例声明移动到第二个粘贴的代码中,但这会产生更多错误,因为“模块”调用的类也使用了一些“模板”类 - 所以会出现同样的问题更进一步。

我哪里弄错了她,或者完全错过了,我确定是后者,但我真的需要帮助。谢谢

【问题讨论】:

    标签: php class object instantiation


    【解决方案1】:

    在我看来,当您尝试调用对象方法时,变量 $module 不在范围内。你能在 $module->process_data("module_" . $page) 之前尝试 var_dump($module)。这个函数的结果是什么?快速的解决方案可能是声明 $module 全局,但无论如何全局都不是一个好主意(但您可以检查它是否有效)。

    【讨论】:

    • var_dump 确实返回了一个空值。我之前尝试过全局,但这并没有解决问题。我已经阅读了有关对象和类的文档,但这并没有启发我;当然没有人在多个文件/类中遇到问题。
    • 但是如果你在第一个文件中声明变量 $module global,并且你写 global $module; var_dump($模块);你得到了什么?仍然为空?
    • 宾果游戏!不需要第一个文件中的全局声明,而是添加全局 $module; var_dump($模块);就在使用该对象之前似乎工作得很好。那里的解释是什么。就像现在一样,在下一个被调用的文件中,这对不同的对象给出了相同的错误。
    • 问题在变量范围内,不在类声明或其他任何地方。当您在文件中(在任何函数之外)声明变量时,其范围仅限于该单个文件。如果你想在其他文件中使用它,你必须将它声明为全局。
    • 从类本身(在任何函数之前)声明全局变量还是在调用对象之前保留它会更好吗?
    猜你喜欢
    • 2014-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-29
    相关资源
    最近更新 更多