首頁  >  文章  >  後端開發  >  php裡的雙冒號範圍解析運算子與箭頭 -> 運算子的差別

php裡的雙冒號範圍解析運算子與箭頭 -> 運算子的差別

黄舟
黄舟原創
2017-07-02 11:48:513646瀏覽

雙冒號一般是用在靜態方法、靜態變數的調用,此時類別不需要實例化。而是用箭頭運算子- > 時,必須要將類別進行實例化(或在類別的內部呼叫也可以。)

雙冒號(::)是位置訪問符號。並不僅僅是指靜態方法和變數。而是表示叫冒號得左邊這一坨呼叫冒號的右邊這一坨。這樣一個意義。 so。 。左邊不能寫$self。因為$self先解析,除非前面就定義了$self這個變數是指向自己的。
在php最新版本。雙冒號就是完全遵循這個作用得用法了。 。可以取代- > 呼叫物件得變數。因為是位置指示符嘛。 。

就是為了區分物件的方法和屬性,和是存取類別的靜態方法和靜態變量,類別的靜態方法和靜態變數是類別公用的,不需要實例化也能訪問,而物件的方法和屬性是每個物件特有的,因此必須先實例化。其他語言如C++,JAVA等也是一樣的(當然它們提供的存取符號可能不一樣)

#- > 是存取物件的方法和屬性,::是存取類別的靜態方法和靜態變數

->物件存取和 ::位置存取

理論部分前面各位都說過了,確實也都是對的。但是php有一點不同。
預設配置中,php並沒有嚴格要求 :: 一定呼叫的是static方法
測試以下程式碼就可以知道

class t{
    public $v = 1;
    public function getVar(){
        return 1;//$this->v;
    }
}

class xxxxx
{
public function actionIndex()
    {
$x = t::getVar();
        $t = new t();
        $x = $t->getVar();
    }
}


作者:楚天乐
链接:https://www.zhihu.com/question/19782824/answer/35943595
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

以上是php裡的雙冒號範圍解析運算子與箭頭 -> 運算子的差別的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn