我在php中有一个创建另一个类的类,我希望这个子类能够调用父类,但不要将$ this作为参数传递给子类。我也不想让父类成为全局。有没有办法调用父类,某种方式像parent->函数或类似的东西?
答案 0 :(得分:4)
我认为你所谓的父子关系只是一个组合('父'在层次结构类中保存一个不相关的实例,'子')。如果我的假设是正确的,那么这闻起来很糟糕,因为这两个类会紧密耦合,并指向某个地方的糟糕设计(“父”,“孩子”或两者)。
不那么臭的替代品:
答案 1 :(得分:2)
正如Maciej所说,这是非常hackish,我不推荐它,但它是可能的:
<?php
class B
{
function B() {
$trace = debug_backtrace();
$trace[1]['object']->y();
}
}
class A
{
function x() {
$z = new B;
}
function y() {
printf("hi");
}
}
$test = new A;
$test->x();
?>
答案 2 :(得分:0)
这是一种黑客攻击,但尝试分析debug_backtrace()
答案 3 :(得分:0)
天啊,为什么? “看着妈妈,我可以不用手握住我的小便。哎呀,现在又发生了。很棒。” 它可能是如此简单,但我想我们永远不会知道为什么这是被禁止的。我的猜测是,你只是不理解OOP(因为你在类和实例层次结构之间的混淆暗示),而你却懒得学习它。 Ceci n'est pas une pipe!(...)但没有将$ this作为参数传递给子类
外观:
<?php
class AClass {
public $parent = false;
public function setParent($parent) {
$this->parent = $parent;
}
public function createChild() {
$newInstance = new AClass();
$newInstance->setParent($this);
}
}
?>
是的,就这么简单!你现在有了父母。
还是它,因为你不允许修改父类? 有一个秘密,但我会告诉你:
邪恶术士的0级限制:inheritance,也称为“class B extends A {}
”。
但是我保证会投票你的问题(并诚实地道歉),如果你能给我们一个很好的理由,为什么禁止传递参考。
答案 4 :(得分:0)
我没有做足够的PHP知道这是否可行,但你不能将委托/回调传递给对象的构造函数吗?这样你就没有整个对象那里只是对你要调用的方法的引用!
HTH
单稳