在php中获取父级扩展类
我有 oop php 代码:
class a {
// with properties and functions
}
class b extends a {
public function test() {
echo __CLASS__; // this is b
// parent::__CLASS__ // error
}
}
$b = new b();
$b->test();
我有一些父类(普通和抽象)和许多子类。子类扩展父类。因此,当我在某个时刻实例化孩子时,我需要找出我调用的父母。
例如,函数 b::test()
将返回 a
我如何从我的类 b 中获取(从我的代码中)类 a
?
谢谢
i have the oop php code:
class a {
// with properties and functions
}
class b extends a {
public function test() {
echo __CLASS__; // this is b
// parent::__CLASS__ // error
}
}
$b = new b();
$b->test();
I have a few parent class (normal and abstract) and many child classes. The child classes extend the parent classes. So when I instantiate the child at some point I need to find out what parent I called.
for example the function b::test()
will return a
How can I get (from my code) the class a
from my class b?
thanks
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
您的代码建议您使用 parent,这实际上是您所需要的。问题在于神奇的
__CLASS__
变量。文档指出:
这正是我们所需要的,但正如 php.net 上的此评论中所述:
如果您只需要父类,也有一个函数。那个叫做 get_parent_class
Your code suggested you used parent, which in fact is what you need. The issue lies with the magic
__CLASS__
variable.The documentation states:
Which is what we need, but as noted in this comment on php.net:
If you only are in need of the parent class, theres a function for that aswell. That one is called get_parent_class
您可以使用
get_parent_class
:如果
B::test
是静态的,这也将起作用。注意:使用不带参数的
get_parent_class
与将$this
作为参数传递之间存在细微差别。如果我们将上面的示例扩展为:我们将
A
作为父类(调用该方法的 B 的父类)。如果您始终想要正在测试的对象最接近的父对象,则应该使用get_parent_class($this)
代替。You can use
get_parent_class
:This will also work if
B::test
is static.NOTE: There is a small difference between using
get_parent_class
without arguments versus passing$this
as an argument. If we extend the above example with:We get
A
as the parent class (the parent class of B, where the method is called). If you always want the closest parent for the object you're testing you should useget_parent_class($this)
instead.您可以使用反射来做到这一点:
而不是
使用
You can use reflection to do that:
Instead of
use
请改用
class_parents
。它将给一系列的父母。Use
class_parents
instead. It'll give an array of parents.