什么是正确的方式来获得new self()
使用当前实例的构造? 换句话说,当我这样做:
class Foo{
function create(){
return new self();
}
}
Class Bar extends Foo{
}
$b = new Bar();
echo get_class($b->create());
我想看看: Bar
,而不是: Foo
什么是正确的方式来获得new self()
使用当前实例的构造? 换句话说,当我这样做:
class Foo{
function create(){
return new self();
}
}
Class Bar extends Foo{
}
$b = new Bar();
echo get_class($b->create());
我想看看: Bar
,而不是: Foo
public static function create()
{
$class = get_called_class();
return new $class();
}
这应该工作。
class Foo{
public static function create()
{
$class = get_called_class();
return new $class();
}
}
class Bar extends Foo{
}
$a = Foo::create();
$b = Bar::create();
echo get_class($a), PHP_EOL, get_class($b);
显示:
Foo Bar
UPD:
如果你想不静,则:
<?php
class Foo{
public function create()
{
$class = get_class($this);
return new $class();
}
}
class Bar extends Foo{}
$a = new Bar();
$b = $a->create();
echo get_class($a), PHP_EOL, get_class($b);
?>
显示:
Bar Bar
class Foo{
function create(){
$c = get_class($this);
return new $c();
}
}
Class Bar extends Foo{
}
$b = new Bar();
echo get_class($b->create());
存储类类型的临时变量,然后返回它的一个新的实例。
Class Bar extends Foo {
function create(){
return self;
}}
如果从子类调用一个函数,那么,如果将搜索最近的父调用它。 这是继承。
我们的想法是在这种情况下使用多态。 重新声明从孩子重写的功能它的父的活动。 如果你想运行它的父功能太多,那么你必须调用它parent::callee();