我在使用PHP扩展类时遇到了一些麻烦。 谷歌搜索了一段时间。
$a = new A();
$a->one();
$a->two();
// something like this, or...
class A {
public $test1;
public function one() {
echo "this is A-one";
$this->two();
$parent->two();
$parent->B->two();
// ...how do i do something like this (prepare it for using in instance $a)?
}
}
class B extends A {
public $test2;
public function two($test) {
echo "this is B-two";
}
}
我对程序PHP很好。
答案 0 :(得分:2)
无法做到。首先,A类是B类的父级,因此使用父级的东西就在列表之外。
对于没有父类的子类,有很多事情要做:
这些都不是反过来的,所以它们共同构成了你不能调用孩子的功能的原因。
答案 1 :(得分:2)
你的例子很好,但你在这里表现出一点混乱:
public function one() {
echo "this is A-one";
$this->two();
$parent->two();
$parent->B->two();
}
你想要的是我想的:
class A
{
function one()
{
echo "A is running one\n";
$this->two();
}
function two()
{
echo "A is running two\n";
}
}
class B extends A
{
function two()
{
echo "B is running two\n";
}
}
然后你想要创建一个B类型的对象并调用函数“one”
$myB = new B();
$b->one();
这将输出
A is running one
B is running two
这是多态类行为的一个例子。超类将知道调用当前实例的函数版本“two”。这是PHP和大多数面向对象语言的标准功能。
注意,超类从不知道子类,你可以调用“two”方法并运行B版本的唯一原因是因为在父(A)类中定义了函数“two”。
答案 2 :(得分:0)
仔细阅读PHP手册的Object Inheritance section。是的,http://us2.php.net/oop中有很多信息,但它可以帮助您考虑OOP可以获得的信息。
答案 3 :(得分:0)
这是可以做的事情:
class A{
public function methodOfA (){
echo "this is a method of A (and therefore also of B)";
}
}
class B extends A{
public function methodOfB (){
echo "this is a method of B";
// you can do {$this->methodOfA ()} if you want because all of A is inherited by B
}
}
$a = new A (); // $a is an A
$a->methodOfA (); // this is OK because $a is an A
// can't do {$a->methodOfB ()} because $a is not a B
$b = new B (); // $b is a B, and it is also an A, because B extends A
$b->methodOfB (); // ok because $b is a B
$b->methodOfA (); // ok becuase $b is an A
当然,还有更多。 php手册中有一个很好的OOP部分(在artlung的回答中)。