对非对象上的成员函数的调用

php
2022-08-30 08:25:28

所以我正在重构我的代码以实现更多的OOP。我设置了一个类来保存页面属性。

class PageAtrributes 
{
  private $db_connection;
  private $page_title;

    public function __construct($db_connection) 
    {
        $this->db_connection = $db_connection;
        $this->page_title = '';
    }

    public function get_page_title()
    {
        return $this->page_title;
    }

    public function set_page_title($page_title)
    {
        $this->page_title = $page_title;
    }
}

稍后我像这样调用set_page_title()函数

function page_properties($objPortal) {    
    $objPage->set_page_title($myrow['title']);
}

当我这样做时,我收到错误消息:

在非对象上调用成员函数 set_page_title()

那么我错过了什么呢?


答案 1

这意味着 它不是对象的实例。我们可以看到您用于初始化变量的代码吗?$objPage

正如您期望的特定对象类型一样,您还可以利用 PHPs 类型提示功能Docs 在违反逻辑时获取错误:

function page_properties(PageAtrributes $objPortal) {    
    ...
    $objPage->set_page_title($myrow['title']);
}

此函数将仅接受第一个参数。PageAtrributes


答案 2

有一个简单的方法来产生此错误:

    $joe = null;
    $joe->anything();

将呈现错误:

致命错误:调用 /Applications/XAMPP/xamppfiles/htdocs/casMail/dao/server 中非对象上的成员函数.php第 23 行anything()

如果PHP只是说,

致命错误:未定义来自 Joe 的调用,因为 (a) joe 为 null 或 (b) joe 未在行中定义 <##>。anything()

通常,您已经构建了类,因此未在构造函数中定义或$joe


推荐