0

为什么我不能像这样通过 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 解析错误:语法错误,意外的 T_PAAMAYIM_NEKUDOTAYIM,期待 ',' 或 ';' 在第 14 行的 /root/1.php 中

但是这样称呼它很好:

$b = $class_a->class_b;
echo $b::CONST_VAR;
4

1 回答 1

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,但这不是常量应该使用的方式,并且很可能只是为了支持糟糕的编程而添加的。

于 2012-11-09T18:52:38.907 回答