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...