鍍金池/ 問(wèn)答/PHP/ php7里使用$this->出現(xiàn)錯(cuò)誤

php7里使用$this->出現(xiàn)錯(cuò)誤

我在調(diào)用屬性的時(shí)候,php5里沒報(bào)任何錯(cuò)誤,但是在php7里就報(bào)錯(cuò),代碼如下

<?php
class test
{
    protected $view;
    protected function testxxx()
    {
        $this->view = xxx;
    }
}

另外一個(gè)類

<?php
cless xxx extends test
{
    public function xx()
    {
        self::testxxx()
    }
}

錯(cuò)誤提示如下:
[29-Dec-2017 23:21:45 Asia/Shanghai] PHP Fatal error: Uncaught Error: Using $this when not in object context in

答案已經(jīng)解決了,是由于某處使用了可變函數(shù)導(dǎo)致的,解決方法

call_user_func([new xxx, '函數(shù)名'])

另外關(guān)于大家說(shuō)該使用$this,而非self的問(wèn)題,解釋如下:

public:
    self::var 調(diào)用父類方法或者屬性
    parent::method 調(diào)用父類方法
    實(shí)例中可以通過(guò)$this->var 調(diào)用public類型的方法或?qū)傩?protected:
    self::var 調(diào)用父類方法或者屬性
    parent::method 調(diào)用父類方法
    實(shí)例中不可以通過(guò)$this->var 調(diào)用public類型的方法或?qū)傩?private:
    只能在該類中使用

綜合以上幾點(diǎn),所以使用this和self在該實(shí)例中都是可以的
不管怎么樣,感謝各位大佬指點(diǎn)迷津
歡迎前往往小站:歡迎前往小站

回答
編輯回答
毀與悔

test方法你是怎么調(diào)用的?沒有實(shí)例化使用$this就會(huì)報(bào)錯(cuò)

2017年10月13日 00:15
編輯回答
萢萢糖

test 類里定義的 test 方法是普通方法,而你在繼承類中是靜態(tài)調(diào)用的。

2018年4月18日 05:13
編輯回答
晚風(fēng)眠

你的代碼相當(dāng)于在靜態(tài)方法修改非靜態(tài)屬性的值,肯定要報(bào)Fatal error咯。去好好學(xué)學(xué)面向?qū)ο笳Z(yǔ)法。

2018年7月1日 16:28
編輯回答
落殤

問(wèn)題已經(jīng)解決,錯(cuò)誤和以上示例無(wú)關(guān),是因?yàn)槲以谀程幨褂檬褂每勺兒瘮?shù)導(dǎo)致的,問(wèn)題解決

2017年11月12日 22:49
編輯回答
孤毒
self::testxxx();
//改為
$this->testxxx();
2017年5月6日 16:07