PHP 雙冒號的用法

2021-06-10 06:18:06 字數 864 閱讀 6762

在php中,訪問類的方法/變數有兩種方法:

1. 建立物件$object = new class(),然後使用

"->"呼叫:$object

->attribute/function,前提是該變數/方法可訪問。

2. 直接呼叫類方法/變數

:class::

attribute/func

tion

,無論是靜態/非靜態都可以。但是有前提條件:

a. 如果是變數,需要該變數可訪問

。b. 如果是方法,除了該方法可訪問外,還需要滿足:

b1) 如果是靜態方法,沒有特殊條件;

b2)

如果是非靜態方法,需要改方法中沒有使

用$this,

即沒有呼叫非靜態的變數/方法,

當然,呼叫靜態的變數/方法沒有問題。

然後我們再看一下使用$object->... 

和使用class::... 都有什麼區別:

1. 使用$object->... ,需要執行建構函式建立物件;

2. 使用class::... 呼叫靜態方法/變數,不需要執行建構函式創

建物件;

3. 使用class::... 呼叫非靜態方法/變數,也不需要執行建構函式建立物件。

然後奇怪的地方就出來了,既然2和3都一樣,那靜態方法/變數存在還有什麼意義呢?

差異還是顯然存在的,如下:

1. 靜態變數

靜態成員只保留乙個變數值,而這個變數值對所有的例項都是有效,

也就是說,所有的例項共享這個成員。

2. 靜態方法

靜態方法可以直接使用class::... 來呼叫,而非靜態方法需要滿足一定限制條件才能使用class::.. 的方法呼叫,如之前所述。

PHP雙冒號 的用法

雙冒號操作符即作用域限定操作符scope resolution operator可以訪問靜態 const和類中重寫的屬性與方法。在類定義外使用的話,使用類名呼叫。在php 5.3.0,可以使用變數代替類名。program list 用變數在類定義外部訪問 view source print clas...

PHP中雙冒號 的用法

一,當呼叫靜態屬性和靜態方法時 與 的作用相同,只不過使用的物件不一樣!引用類裡面的靜態方法或者屬性,而且不需要例項化!建立乙個類,並且建立乙個靜態屬性 a,乙個靜態方法b,如下 class test 如果要呼叫靜態屬性 a,如下 test a 注意,a前面需要帶 符號,這一點與 符號不一樣!如果要...

PHP中雙冒號 的用法

雙冒號操作符 即作用域限定操作符scope resolution operator可以訪問靜態 const和類中重寫的屬性與方法。一 當呼叫靜態屬性和靜態方法時 與 的作用相同,只不過使用的物件不一樣!引用類裡面的靜態方法或者屬性,而且不需要例項化!建立乙個類,並且建立乙個靜態屬性 a,乙個靜態方法...