[英]PHP call function from parent in child best practice
我有一個關於PHP從子類的父類調用函數的技巧問題。 我們有3種情況,我希望有利弊。
<?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();
}
}
2)這里的繼承是不必要的。 如果選擇此實現,則必須將output
和構造方法都更改為靜態。
//scenario 2
class test2 extends test{
public function __construct(){
test::__construct();
}
public function say(){
test::output();
}
}
3)從這里繼承也是不必要的。 請注意,此處使用的是“組件繼承”模式,這是一個好習慣,因為它提供了更大的靈活性,但是您必須刪除“擴展測試”。
//scenario 3
class test3 extends test{
private $handle ;
public function __construct(){
$this->handle = new test();
}
public function say(){
$this->handle->output();
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.