php中類的不定參數使用示例

語言: CN / TW / HK

在類的實例化過程中,可以帶或不帶參數,那麼構造函數將如何處理這些參數呢?為了使構造函數具有通用性,在定義構造函數時,一般不帶參數,然後在其內部對參數情況進行處理。下面代碼顯示了一個完整的通用Person類。

<?php
/**
 * __construct() 不需設置參數,用php內置函數自動獲取
 *
 * 在下面示例中,在構造函數裏使用了內置函數func_get_args()獲取到所有的參數,
 * func_num_args()獲取到參數的數量,然後使用判斷語句,執行其中一個用户自定義方法,
 * 從而實現了構造函數帶不定參數個數的執行方法。
 */
    class Person{  // 定義Person類
        private $name;  // 定義name屬性
        private $name2;
        
        public function __construct() {
            $array=func_get_args();  //獲取所有參數
            $num=func_num_args();   //獲取參數的數量
            
            if(method_exists($this, $f='func'.$num)){  //重要:檢查類中方法是否存在
                call_user_func_array(array($this, $f), $array);  // 執行一個方法與參數數組
            }
            
        }
        
        public function func0() {
            $this->name = "沒有參數時輸出:唐僧";
        }
        
        public function func1($value) {
            $this->name = $value;
        }
        
        public function func2($value1, $value2) {
            $this->name = $value1;
            $this->name2 = $value2;
        }
        
        function getName(){
            return $this->name;
        }
        
       function getName2(){
           $arr[0] = $this->name;
           $arr[1] = $this->name2;
            return $arr;
        }
        
        function setName($value){
            $this->name = $value;
        }
        
        function __destruct() {
            print "<br>對象被銷燬";
        }
    }
    
    $person = new Person();
    echo $person->getName() . "<br>";
    
    $person2 = new Person("孫悟空");
    echo $person2->getName() . "<br>";
    
    $person3 = new Person("豬八戒", "沙和尚");
    print_r($person3->getName2());
?>

執行後的效果圖:

以上內容希望幫助到大家,更多PHP大廠PDF面試文檔,PHP進階架構視頻資料,PHP精彩好文免費獲取可以關注公眾號:PHP開源社區,或者訪問:

2021金三銀四大廠面試真題集錦,必看!

騰訊一面的Redis秒殺面試題你會麼?

四年精華PHP技術文章整理合集——PHP框架篇

四年精華PHP技術文合集——微服務架構篇

四年精華PHP技術文合集——分佈式架構篇

四年精華PHP技術文合集——高併發場景篇

四年精華PHP技術文章整理合集——數據庫篇