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();
?>