在运行时而不是在编译时绑定的 __CLASS__ 版本
Posted
技术标签:
【中文标题】在运行时而不是在编译时绑定的 __CLASS__ 版本【英文标题】:Version of __CLASS__ that binds at run-time rather than at compile-time 【发布时间】:2015-04-08 16:35:05 【问题描述】:在下面的 php 代码中,我想用函数 __X__()
(或类似的东西)替换 Foo
类中的 __CLASS__
魔术常量,这样当从实例 @ 调用方法 hello()
时Bar
类的 987654325@,它打印 hello from Bar
(而不是 hello from Foo
)。我想这样做
不覆盖 hello()
内的 Bar
。
所以基本上,我想要一个在运行时而不是在编译时动态绑定的__CLASS__
版本。
class Foo
public function hello()
echo "hello from " . __CLASS__ . "\n";
class Bar extends Foo
public function world()
echo "world from " . __CLASS__ . "\n";
$bar = new Bar();
$bar->hello();
$bar->world();
输出:
hello from Foo
world from Bar
我想要这个输出(不覆盖 hello()
内的 Bar
):
hello from Bar
world from Bar
【问题讨论】:
【参考方案1】:你可以简单地使用get_class()
,像这样:
echo "hello from " . get_class($this) . "\n";
echo "world from " . get_class($this) . "\n";
输出:
hello from Bar
world from Bar
【讨论】:
以上是关于在运行时而不是在编译时绑定的 __CLASS__ 版本的主要内容,如果未能解决你的问题,请参考以下文章
“_OBJC_CLASS_$_CATransaction,引用自:”编译时错误是啥意思?