我有一个扩展抽象类的类。 PHP允许从抽象方法中访问扩展类的实例吗?
像这样的东西:abstract class Foo{
protected function bar(){
return $this;
}
}
class Bar extends Foo{
public function foo(){
// this should hold Bar instance and not Foo's
$barClassInstance = $this->bar();
}
}
其中$ barClassInstance将保存Bar类实例,而不是抽象的Foo实例?
答案 0 :(得分:3)
尝试它是值得一千个stackoverflow问题
<?php
abstract class Foo{
protected function bar(){
echo 'Foo', PHP_EOL;
var_dump($this);
return $this;
}
}
class Bar extends Foo{
public function foo(){
echo 'Bar', PHP_EOL;
var_dump($this);
// this should hold Bar instance and not Foo's
$barClassInstance = $this->bar();
var_dump($barClassInstance);
}
}
$bar = new Bar();
$bar->foo();
Bar
object(Bar)#1 (0) {
}
Foo
object(Bar)#1 (0) {
}
object(Bar)#1 (0) {
}
$this
是对实例的引用,无论它实际上是哪个子类的实例。没有Foo
实例,因为Foo
无法实例化,它是抽象的。即使Foo
是具体的类,您也不会在同一个对象中拥有Foo
$this
和Bar
$this
。您只能$this
指向已创建的特定子类。