调用非对象上的成员函数

Sco*_*reu 67 php

所以我正在重构我的代码来实现更多的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;
    }
}
Run Code Online (Sandbox Code Playgroud)

稍后我会调用set_page_title()函数

function page_properties($objPortal) {    
    $objPage->set_page_title($myrow['title']);
}
Run Code Online (Sandbox Code Playgroud)

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

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

那我错过了什么?

All*_*nde 44

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

正如您所期望的特定对象类型,您还可以使用PHP类型提示功能文档来在违反逻辑时获取错误:

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

此功能仅接受PageAtrributes第一个参数.


Dav*_*rry 36

有一种简单的方法可以产生这个错误:

    $joe = null;
    $joe->anything();
Run Code Online (Sandbox Code Playgroud)

将呈现错误:

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

如果PHP会说,那会好很多,

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

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

  • 那么,今天我来找这个.大卫写的有关复制此错误的内容证实了我的猜测,否则我需要测试.:) (6认同)

dip*_*ent 7

要么$objPage不是实例变量,要么$objPage用不是类实例的东西覆盖PageAttributes.