記錄php中雙冒號的乙個用法

2021-06-21 23:22:01 字數 1304 閱讀 6807

php中雙冒號的用法

不例項化類 而呼叫 類中的方法和屬性

一直以為php雙冒號只是在類呼叫靜態屬性和靜態方法的時候上用到。

但是我錯了,今天我在看ecmall的一段**時發現

ecmall::startup( ... );

class ecmall

}

我才知道原來雙冒號的用法不僅僅是在呼叫靜態的時候用到。

下面測試了一下 (php - 5.3.27)

class a

public static function bb()

}a::aa();

a::bb();

$a = new a;

$a->aa();

3個輸出都正常 沒有報錯

class a

echo a::$c; //ok

echo a::$d; //這個會語法錯誤

再看下面這個

class a

}a::bb();

fatal error

: using $this when not in object context in...

也是報錯,$this 是當前物件 雙冒號呼叫類是沒有例項化的,所以這裡必然會報錯! 

再接著,

class a

}a::bb();

這個還是一樣會報錯,因為slef只能訪問當前類的靜態方法和靜態屬性。

接著,

class a

echo a::$c;

parse error

: syntax error, unexpected t_variable, expecting t_function in...

這個一樣報錯

上面的都是public的 我們現在看看 prtected 和 private的

class a

private function bb()

}a::aa(); //fatal error: call to protected method a::aa() from context ''

a::bb(); //fatal error: call to private method a::bb() from context ''

總結一下

雙冒號在呼叫類的方法和屬性時,可以呼叫 靜態方法,靜態屬性 和 普通的方法,還有 這些都是要public的才行。

PHP中雙冒號 的用法

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

PHP中雙冒號 的用法

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

PHP雙冒號 的用法

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