当前位置:  开发笔记 > 编程语言 > 正文

调用非对象上的成员函数

如何解决《调用非对象上的成员函数》经验,为你挑选了3个好方法。

所以我正在重构我的代码来实现更多的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> Allain Lalon..:

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

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

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

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



2> David Urry..:

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

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

将呈现错误:

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

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

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

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


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

3> dipole_momen..:

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

推荐阅读
360691894_8a5c48
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有