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

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

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

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

另外一個類

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

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

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

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

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

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

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

回答
編輯回答
毀與悔

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

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

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

2018年4月18日 05:13
編輯回答
晚風眠

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

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

問題已經(jīng)解決,錯誤和以上示例無關(guān),是因為我在某處使用使用可變函數(shù)導致的,問題解決

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