PHP5的部類約束

來源:互聯網
上載者:User
PHP5的類型約束

PHP中函數參數有類型約束。那就是,明確要求參數的類型。比如以下代碼:

?

?

var;    }    /**     * 另一個測試函數     * 第一個參數必須為數組      */    public function test_array(array $input_array) {        print_r($input_array);    }}//另外一個類class OtherClass {    public $var = 'Hello World';}?> 

?

那麼,類型約束又有什麼關係呢?這裡有一個奇特的問題。那就是:

如果顯式指定參數是某種類型的變數,則參加快PHP的程式效率。為什麼呢?因為,反是對象,PHP5預設是以引用傳遞的。所以,public function test(OtherClass $otherclass) {
這行代碼中,雖沒有引用符號,實際也是引用傳參。

那麼,數組呢?因為,在PHP中我們面對的大資料的類型不外乎三類,對象,數組,字串,而字串是要明確在參數表中使用引用符號(&)的。

數組怎樣,您試一下就明白了。所以,我不多說了!

?

當對象參數被加上類型約束後,仍可以有預設值,成為選擇性參數。如果這樣,函數內部就要判斷,傳入參數是否為NULL。但一般是不需要使用 instanceof這個運算子了。 (此運算子比較特別,如果要否定,必須是?(!(A instanceod B))的形式。?)以下是有預設值的原碼:

?

color=$color;        $this->ca = $ca;        $this->array = $array;        $ca->name=$srcStr;        print_r($this);    }}$cat=new ca();$cbt=new cb();$cbt->test('test','red'); //這裡我們可以不傳對象$cbt->test('test','blue',$cat); //我們可以傳對象,但數組仍不傳print_r($cat); $cat1=new ca();$arr=array(1,2,3,4,5);$cbt->test('test','black',$cat1,$arr); //數組對象全部傳入array_push($arr,6,7,8,9); //再改變數組print_r($cbt->array); //結果傳入的數組未變。?>

?

?

?

?

?

?

1 樓 dewei 2011-01-25

php5中,對象是不需要引用(&)的,大的數組是需要引用(&)的。

2 樓 tonyseek 2011-01-26

樓主說的類型約束好像也適用於PHP中的Interface

3 樓 renzhen 2011-05-20

dewei 寫道

php5中,對象是不需要引用(&)的,大的數組是需要引用(&)的。


這個完全視乎你代碼的需求,如果你希望函數內參數改變而函數外也變,那就用&,否則不用。
那如果函數內的參數數組不會改變呢?
其實加和不加都沒什麼關係。可能有人會說,不加應用不就是傳值了嗎,大的數組會浪費多少記憶體啊。
其實PHP 5已經對賦值實現了Zero on copy,簡單點說,就是,如果將一個大數組a賦值給b,一開始它們指向的是同一個數組對象,記憶體不會成倍增加,只有當b改變了(加一個元素等操作),PHP底層才會先複製一個新的a數組,然後再做操作。
這種機制極大的提高了傳值賦值的效能,基本上不會影響效能。
詳細的資訊可以去網上找。

4 樓 reeze 2011-06-02

對效率應該是沒有影響的,非要對比,對類型的檢查倒是增加了計算。

最明顯的好處就是能約束介面的使用,減少手動類型檢查的代碼。能規範介面

5 樓 iminto 2011-06-27

bardo 寫道

如果顯式指定參數是某種類型的變數,則參加快PHP的程式效率。



?


說話要付責任的。

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.