PHP手冊說訪問PHP類常量
像靜態成員,恆定值不能從對象的實例進行訪問。
這也解釋了爲什麼你不能做到這一點
$this->inst = new Classname();
echo $this->inst::someconstant;
但後來爲什麼這項工作?
$this->inst = new Classname();
$inst = $this->inst;
echo $inst::someconstant;
PHP手冊說訪問PHP類常量
像靜態成員,恆定值不能從對象的實例進行訪問。
這也解釋了爲什麼你不能做到這一點
$this->inst = new Classname();
echo $this->inst::someconstant;
但後來爲什麼這項工作?
$this->inst = new Classname();
$inst = $this->inst;
echo $inst::someconstant;
從PHP交互shell:
php > class Foo { const A = 'a!'; }
php > class Bar { public $foo; }
php > $f = new Foo;
php > $b = new Bar;
php > $b->foo = $f;
php > echo $b->foo::A;
PHP Parse error: syntax error, unexpected T_PAAMAYIM_NEKUDOTAYIM, expecting ',' or ';' in php shell code on line 1
前者語法失敗是PHP解析器不知道如何解決財產引用後雙冒號的原因。不管這是否是有意的,都是未知的。
後者語法有效,因爲它不是通過屬性直接進入,而是通過一個局部變量,其解析器接受的東西能一起工作:
php > $inst = $b->foo;
php > echo $inst::A;
a!
(順便說一句,這同樣限制是到位對於匿名函數作爲屬性,你不能直接使用parens調用它們,你必須先將它們分配給另一個變量,然後從那裏調用它們,這已在PHP的trunk中修復,但我不知道它們是否也修復了雙冒號語法)
引述手冊:
作爲PHP 5.3.0的,有可能使用變量來引用類。變量的值不能是關鍵字(例如self,parent和static)。
它接着用這個例子:
$class = new MyClass();
echo $class::constant."\n"; // As of PHP 5.3.0
所以$inst::someconstant
應該工作。
至於爲什麼$this->inst::someconstant
給出解析錯誤,我不知道。 PHP對某些事情很有趣。
如果您在課堂內,您可以訪問像常量S:
self::MY_CONSTANT;
例如:
class MyClass
{
const MY_CONSTANT = 'constant value';
function showConstant() {
echo self::MY_CONSTANT;
}
}
PHP支持從一個對象實例訪問類常量。下面的代碼是工作(在phpv5.5.5選中):
<?php
class superheroes{
const kal_el = 'Superman';
}
$instance = new superheroes;
echo $instance::kal_el;
來源:http://dwellupper.io/post/48/defining-class-constants-in-php
'$研究所:: someconstant'有效*語法*,但它的實際工作? – deceze 2011-03-27 06:10:22
在我的測試中它確實。 – pettazz 2011-03-27 06:13:14