2012-08-15 57 views
0

有沒有什麼能阻止我在__construct()括號內鍵入這樣的提示?在PHP構造函數中鍵入提示?

<?php 

    class SomeClass extends BaseClass { 

     public function __construct(array $someArray) { 

      parent::__construct($someArray); 
     } 

或者我可以這樣做嗎?

<?php 

    class SomeClass extends BaseClass { 

     public function __construct($someArray = array()) { 

      parent::__construct($someArray); 
     } 

編輯:

這是什麼工作:(感謝@hakra和@Leigh)

<?php 

    class SomeClass extends BaseClass { 

     public function __construct(array $someArray = NULL) { 

      parent::__construct((array) $someArray); 
     } 

對我來說,它看起來不錯,乾淨,我確切地知道它應該意思。

+3

看起來合法 - http://php.net/manual/en/language.oop5.typehinting.php爲什麼不試試? – 2012-08-15 13:18:39

+2

您可以同時執行以下操作:__construct(array $ arr = array()) – xCander 2012-08-15 13:19:55

+0

您已經輸入了代碼,爲什麼不嘗試運行它? – meagar 2012-08-15 13:20:18

回答

2

你可以這樣做:

public function __construct(array $someArray = NULL) 
{ 
    $someArray = (array) $someArray; 
    parent::__construct($someArray); 
    ... 

這裏的情況是利用的= NULL例外的規則。下一行:

$someArray = (array) $someArray; 

只是一些速記NULL轉換成空數組否則保持數組的數組原樣(所謂castDocs數組):

轉換NULL到數組導致一個空數組。

(來源:Converting to arrayDocs

當然,你可以把它寫更短:

public function __construct(array $someArray = NULL) 
{ 
    parent::__construct((array) $someArray); 
} 

,但並不能說明它那麼好。

+0

謝謝,我沒有意識到規則有一個'NULL'異常。 – Leigh 2012-08-15 13:23:50

+0

謝謝你們這些真正的好解釋。我試圖給你們投票,但我只是得到一些無聊的消息。 – 2012-08-15 13:32:18

+0

好吧,我嘗試了這種方法,它完美的工作。對我來說,它看起來很棒,就像在這篇文章中簡短描述的@hakra一樣。謝謝。 – 2012-08-15 14:07:08

6

這是類型沒有默認值暗示,指出一個參數必須被給出,並且它的類型必須是一個數組

public function __construct(array $someArray) {


這是提供爲默認值參數如果沒有參數傳遞,沒有typehint。

public function __construct($someArray = array()) {


這是兩個不同的東西。

在第二種情況下,您可以調用沒有參數的函數,它將工作,但第一個不會。

如果需要,可以將兩者結合使用來指定默認值並指定所需的類型。

public function __construct(array $someArray = array()) {

或者作爲@hakre指出的那樣,你可以這樣做:

public function __construct(array $someArray = NULL) {

+1

如果你讓它成爲可選的'(array $ someArray = NULL)',那麼不需要檢查NULL,使它成爲可選項。 – hakre 2012-08-15 13:21:02

+0

'__construct(array $ someArray)'不會接受'null'作爲它的參數。 – 2012-08-15 13:33:39

+0

'array $ someArray = array()'會正常工作,使用'null'在我看來只是誤導。 – jmalloc 2012-08-15 13:40:08