php的類屬性其實有兩種,一種是類常量,一種是類靜態變量。兩種容易引起混淆。
如同靜態類方法和類實例方法一樣,靜態類屬性和實例屬性不能重定義(同名),但靜態屬性可以和類常量同名。
<?php class test { const constvar='hello world'; static $staticvar='hello world'; function getStaticvar(){ return self::$staticvar; } } $obj=new test(); echo test::constvar //輸出'hello world' echo test::staticvar //出錯,staticvar 前必須加$才能訪問,這是容易和類常量(per-class常量)容易混淆的地方之一 echo test::$staticvar //輸出'hello world' $str='test'; echo $str::$staticvar //出錯,類名在這不能用變量動態化 echo $str::constvar //出錯原因同上 //在類名稱存在一個變量中處於不確定(動態)狀態時,只能以以下方式訪問類變量 $obj2=new $str(); echo $obj2->getStaticvar(); ?> <?php class test { const constvar='hello world'; static $staticvar='hello world'; function getStaticvar(){ return self::$staticvar; } } $obj=new test(); echo test::constvar //輸出'hello world' echo test::staticvar //出錯,staticvar 前必須加$才能訪問,這是容易和類常量(per-class常量)容易混淆的地方之一 echo test::$staticvar //輸出'hello world' $str='test'; echo $str::$staticvar //出錯,類名在這不能用變量動態化 echo $str::constvar //出錯原因同上 //在類名稱存在一個變量中處於不確定(動態)狀態時,只能以以下方式訪問類變量 $obj2=new $str(); echo $obj2->getStaticvar(); ?>