如何访问本身是另一个对象的 属性 的对象的静态属性?
How to access static properties of an object that is itself a property of another object?
在 PHP 中,是否可以使用以下类似语法访问本身是另一个对象的 属性 的对象的静态属性:
<?php
class Foo
{
public $bar;
function __construct()
{
$this->bar = new Bar();
}
}
class Bar
{
const TEST = 123;
function __construct() {}
}
$bar = new Bar();
$foo = new Foo();
echo Bar::TEST; // ok
echo $bar::TEST; // ok
echo $foo->bar::TEST; // error
?>
将 属性 分配给一个变量。
$foo = new Foo();
$bar = $foo->bar;
echo $bar::TEST; // that's good.
使用 Late Static Binding 而不是继承 属性 可能会有更好的运气。所以它会是这样的(从上面的 PHP 手册页更改为示例):
<?php
class A
{
public static function who()
{
echo __CLASS__;
}
public static function test()
{
static ::who();
// Here comes Late Static Bindings
}
}
class B extends A
{
public static function who()
{
echo __CLASS__;
}
}
B::test();
?>
这是另一个可能相关或有帮助的话题:PHP Inheritance and Static Methods and Properties
更棘手,但你可以使用 ReflectionClass
echo (new ReflectionClass(get_class($foo->bar)))->getconstant("TEST");
在 PHP 中,是否可以使用以下类似语法访问本身是另一个对象的 属性 的对象的静态属性:
<?php
class Foo
{
public $bar;
function __construct()
{
$this->bar = new Bar();
}
}
class Bar
{
const TEST = 123;
function __construct() {}
}
$bar = new Bar();
$foo = new Foo();
echo Bar::TEST; // ok
echo $bar::TEST; // ok
echo $foo->bar::TEST; // error
?>
将 属性 分配给一个变量。
$foo = new Foo();
$bar = $foo->bar;
echo $bar::TEST; // that's good.
使用 Late Static Binding 而不是继承 属性 可能会有更好的运气。所以它会是这样的(从上面的 PHP 手册页更改为示例):
<?php
class A
{
public static function who()
{
echo __CLASS__;
}
public static function test()
{
static ::who();
// Here comes Late Static Bindings
}
}
class B extends A
{
public static function who()
{
echo __CLASS__;
}
}
B::test();
?>
这是另一个可能相关或有帮助的话题:PHP Inheritance and Static Methods and Properties
更棘手,但你可以使用 ReflectionClass
echo (new ReflectionClass(get_class($foo->bar)))->getconstant("TEST");