关于php:调用非对象的成员函数

关于php:调用非对象的成员函数

Call to a member function on a non-object

本问题已经有最佳答案,请猛点这里访问。

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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()函数

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

当我收到错误消息时:

Call to a member function set_page_title() on a non-object

那我错过了什么?


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

正如您所期望的特定对象类型一样,您也可以使用phps类型暗示featuredocs在违反逻辑时获取错误:

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

此函数只接受第一个参数的PageAtrributes


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

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

将呈现错误:

Fatal error: Call to a member function anything() on a non-object in /Applications/XAMPP/xamppfiles/htdocs/casMail/dao/server.php on line 23

如果PHP只是说,

Fatal error: Call from Joe is not defined because (a) joe is null or (b) joe does not define anything() in on line <##>.

通常,您已经构建了自己的类,这样在构造函数或


或者$objPage不是一个实例变量,或者您正在用一个不是类PageAttributes的实例的东西覆盖$objPage


也可能意味着,当初始化对象时,可能在代码的另一部分中重新使用了对象名。因此,将它的方面从一个对象更改为一个标准变量。

工业工程

1
2
3
4
5
6
7
8
9
10
11
12
$game = new game;

$game->doGameStuff($gameReturn);

foreach($gameArray as $game)
{
   $game['STUFF']; // No longer an object and is now a standard variable pointer for $game.
}



$game->doGameStuff($gameReturn);  // Wont work because $game is declared as a standard variable.  You need to be careful when using common variable names and were they are declared in your code.

我推荐上面接受的答案。但是,如果手头紧,可以在page_properties函数中将对象声明为全局对象。

1
2
3
4
5
6
$objPage = new PageAtrributes;

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

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

看起来变量$objportal与$objpage的名称不同


您可以在函数中使用"use",如下面的示例

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

我意识到我没有将$objpage传递到page_properties()中。它现在工作得很好。


推荐阅读

    linux命令行设置字体?

    linux命令行设置字体?,系统,工具,终端,软件,电脑,数字,位置,等级,字体,命令,L

    linux无效对象的命令?

    linux无效对象的命令?,软件,系统,单位,网络,管理,术语,检测,电脑,环境,风险,l

    linux命令快捷设置?

    linux命令快捷设置?,第一,系统,名称,终端,发行,首页,命令,快捷键,窗口,桌面,l

    linux命令设置扩展屏?

    linux命令设置扩展屏?,工具,系统,电脑,技术,软件,装备,情况,工作,命令,显示

    脚本调用linux命令?

    脚本调用linux命令?,代码,系统,工作,底部,脚本,位置,环境,行用,官网,标准,typ

    调用函数命令linux?

    调用函数命令linux?,系统,管理,网络,通用,统一,观察,地址,代码,设备,地方,怎

    linux命令设置中文?

    linux命令设置中文?,系统,工作,数据,管理,设备,环境,标的,第一,网上,模式,lin

    设置网址命令linux?

    设置网址命令linux?,地址,系统,网络,代码,网址,密码,信息,电脑,管理,基础,lin

    linux设置日期命令?

    linux设置日期命令?,时间,系统,标准,命令,信息,大陆,国家,日期,时钟,时区,详

    linux设置时钟命令?

    linux设置时钟命令?,时间,系统,服务,图片,命令,网络,信息,风险,国家,大陆,lin

    linux命令长度设置?

    linux命令长度设置?,地址,工作,命令,管理,环境,系统,信息,目录,文件,参数,Lin

    linux内核总调用命令?

    linux内核总调用命令?,工作,地址,系统,信息,管理,策略,命令,目录,时间,基础,

    linux双ip设置命令?

    linux双ip设置命令?,地址,系统,代码,网络,设备,服务,通讯,名称,信息,密码,lin

    linux编程调用命令?

    linux编程调用命令?,系统,标准,管理,工作,基础知识,情况,环境,设备,基础,首

    linux用户组命令设置?

    linux用户组命令设置?,管理,系统,密码,代码,电脑,用户组,用户,软件,新增,命

    linux密钥设置命令?

    linux密钥设置命令?,密码,服务,数据,认证,环境,官网,系统,概念,通信,管理,如

    命令行怎么设置linux?

    命令行怎么设置linux?,系统,工作,命令,密码,信息,地方,工具,终端,文件,目录,

    linux内核设置命令?

    linux内核设置命令?,系统,信息,工作,管理,地址,命令,名称,情况,发行,目录,如

    linux命令窗口调用?

    linux命令窗口调用?,系统,工具,首页,终端,命令,数据,盘中,代码,密码,快捷键,