子最佳实践中来自父级的PHP调用函数
我有一个关于PHP在子类中从父类调用函数的技巧性问题。 我们有三种情况,我要正反两方面子最佳实践中来自父级的PHP调用函数,php,Php,我有一个关于PHP在子类中从父类调用函数的技巧性问题。 我们有三种情况,我要正反两方面 <?php class test{ private $var ; public function __construct(){ $this->var = 'Hello world'; } public function output(){ echo $var.'<br>'; } } //scenario 1 class test1 e
<?php
class test{
private $var ;
public function __construct(){
$this->var = 'Hello world';
}
public function output(){
echo $var.'<br>';
}
}
//scenario 1
class test1 extends test{
public function __construct(){
parent::__construct();
}
public function say(){
parent::output();
}
}
//scenario 2
class test2 extends test{
public function __construct(){
test::__construct();
}
public function say(){
test::output();
}
}
//scenario 3
class test3 extends test{
private $handle ;
public function __construct(){
$this->handle = new test();
}
public function say(){
$this->handle->output();
}
}
//finally I can call any 3 cases by one of the below codes
$test1 = new test1();
$test1->say();
//or
$test2 = new test2();
$test2->say();
//or
$test3 = new test3();
$test3->say();
?>
是否有最佳实践或三种方案中有哪一种比其他方案更好
提前谢谢你。1)是正确的
2) 不正确,请像静态方法一样调用该方法
3) 它在构造函数中没有任何意义扩展和创建。1)
这是正确的,因为它从其方法调用父对象
class test1 extends test{
public function __construct(){
parent::__construct();
}
public function say(){
parent::output();
}
}
(二)
这里的继承是不必要的。
如果您选择此实现,则必须将输出
和construct方法都更改为static
//scenario 2
class test2 extends test{
public function __construct(){
test::__construct();
}
public function say(){
test::output();
}
}
(三)
从这里继承也是不必要的。
注意这里您使用的是“组件重于继承”模式,这是一个很好的实践,因为它提供了更多的灵活性,但是您必须删除“扩展测试”
使用家长是一种很好的做法。谢谢。所有3个都做同样的事情,无论它们是否不正确,都是如此。3)被称为decorator模式,实际上有很好的用例。唯一不好的是,在本例中,要装饰的对象安装在装饰器内部,而不是从外部传递到装饰器中。因此,这个装饰器对于不同的Object.Sven及其自身扩展的类是不可用的。我不认为这是错误的。我说extend+构造没有意义
//scenario 3
class test3 extends test{
private $handle ;
public function __construct(){
$this->handle = new test();
}
public function say(){
$this->handle->output();
}
}