Php 访问兄弟方法
我整天都在寻找答案,但似乎找不到答案。对不起,如果我没什么道理的话,我会失去理智的 以下是我想做的:Php 访问兄弟方法,php,oop,Php,Oop,我整天都在寻找答案,但似乎找不到答案。对不起,如果我没什么道理的话,我会失去理智的 以下是我想做的: abstract class Parent { abstract public function Test(); } class Child1 extends Parent { abstract public function Test() { echo "Test!"; } } class Child2 extends Parent { publ
abstract class Parent {
abstract public function Test();
}
class Child1 extends Parent {
abstract public function Test() {
echo "Test!";
}
}
class Child2 extends Parent {
public function Test2() {
echo "Test2!";
$this->Test(); // Child1::Test();
}
}
再说一次,如果我说的不太有道理,我很抱歉。如果你需要我解释的话,我会尽量多解释。你不能。你想做的事在OOP中毫无意义。如果要从第一个子级执行
Test()
,则需要在父级中移动函数
编辑:好吧,我将更加全面:
您正在尝试调用另一个子类的函数,该子类只有父类共同点
Child1
和Child2
与String
和Integer
在Java(或任何其他OOP语言)中最接近。假设您在int上调用了.upper()
函数:这没有意义 它不是OOP模式,在我所知的任何OOP语言中都不可用(内省魔法除外):
Child2对Child1课程一无所知(也不必知道)。它们可以独立定义
我认为在这一点上,你应该解释你的需求是什么。我想我们可以帮你设计一些图案 Child1中的
Test
重写函数不应是抽象的(正如您所定义的那样)。要从Child2
的Test2
函数调用Child1
的Test
函数,请使用:
Child1 foo = new Child1();
echo foo->Test();
您可以做的事情只是因为它被定义为公共的,而不是因为
Child1
和Child2
有任何关系。您缺少抽象类和方法的概念
抽象类
抽象类是定义一些基本行为的类,不能实例化。它们被设计成子类
抽象方法
这些是需要由扩展类实现的方法。与接口类似,抽象方法定义行为时没有实现
你的代码
在代码中,您使用抽象方法声明了一个抽象类
abstract class Parent {
public abstract function Test();
}
当另一个类子类Parent
时,它必须实现抽象方法使其具体化
class Child extends Parent {
public function Test() {
echo "Test!";
}
}
访问兄弟方法
类或实例没有同级的概念。类无法知道谁是其父类的子类并以静态方式访问它。这里有几个错误:
是保留字Parent
包含抽象方法,因此不能包含正文Child1
扩展了Child2
,但没有实现Parent
方法Test()
Test()
方法本身)。纠正这些问题,修复PHP可能告诉您的任何其他错误,然后执行以下操作:
$p = new Child2();
$p->Test2();
我应该给你这个:
Test2!Test!
这个答案毫无意义;)嗯,除非你做出一些奇怪的假设,否则在我看来没有更好的答案了。他试图调用另一个类的函数,这是不可能的…你实际上还没有说你想做什么。但是,您的两个子类都不起作用,因为对于
Child1
,您将Test
方法保留为抽象,而在Child2
中,您没有覆盖它,因此它仍然是抽象的。因此,两者都不能实例化。如果希望Child1
可创建,请删除该类中的abstract
关键字,该关键字将起作用。我们可能需要第二个子项的更多详细信息。运行它并读取错误。.第一个错误是不能使用'Parent'作为类名,因为它在Test2()中是保留的
您必须创建另一个子项,假设您使Test()
不是抽象的。