为什么我不能像这样通过类A的动态属性从类B调用常量?难道我做错了什么?
class A {
public $class_b;
}
class B {
const CONST_VAR = 'b';
}
$class_a = new A();
$class_a->class_b = new B();
echo $class_a->class_b::CONST_VAR;
PHP Parse错误:语法错误,意外T_PAAMAYIM_NEKUDOTAYIM,期待','或';'在第14行的/root/1.php中
然而,这样称呼它是好的:
$b = $class_a->class_b;
echo $b::CONST_VAR;
答案 0 :(得分:1)
类常量是静态的。 $ class_b变量中有一个B类实例,所以你不应该通过类A访问它,除非你在类B中创建一个返回常量的非静态函数。例如:
class B {
const CONST_VAR = 'b';
function get_constant() {
return self::CONST_VAR;
}
}
现在你可以使用:
$class_a = new A();
$class_a->class_b = new B();
$class_a->class_b->get_constant();
但除非你计划重载b类,否则没有理由这样做,因为你可以使用B :: CONST_VAR;
echo B::CONST_VAR; // prints 'b'
在这里阅读类常量:http://php.net/manual/en/language.oop5.constants.php
应该注意的是,从php 5.3.0开始,常量可以通过你建议的实例访问,$ b :: CONST_VAR,但这不是应该如何使用常量,而且最有可能只是为了支持糟糕的编程而添加