2017-09-11 54 views
-1

我有一個簡單的類與1方法接受參數。如何不通過任何值PHP中的方法

class ArticleController 
{ 
    public function show(Article $article) 
    { 
     // some logic here 
    } 
} 

,我想以這種方式來使用它:

$articleController = new ArticleController; 
$articleController->show(); 

正如你看到的,我沒有任何值傳遞給方法「秀」。但由於php7出來,它強制傳遞該值(依賴),有沒有什麼辦法,我不傳遞該值的方法,仍然可以使用它沒有錯誤? 我的PHP版本7.1.8 =

+0

您可以修改方法聲明,以便它只需要一個可選參數。但即使如此,方法代碼可能無法按預期工作。在問題中發佈完整的方法代碼以確保。 – Calimero

+0

**注意:**如果'$ article'是爲了在類中使用而您將其設置爲'null',則會拋出錯誤。 – Script47

+0

是的,這是一個選項,但我想要的是,我沒有通過任何值的參數沒有一個可選參數。如果你熟悉laravel,它使用這個特性,但我不知道他在後臺場景中做了什麼。 – VeRJiL

回答

6

在問題中所描述的行爲不是特定於PHP 7.它的工作原理相同的PHP 5以及。

你可以設置一個default value的說法$article(使它可選這樣),但如果你把它設置爲NULL,那麼你必須確保你的方法妥善處理值:

class ArticleController 
{ 
    public function show(Article $article = NULL) 
    { 
     if (isset($article)) { 
      // some logic here, $article is an object 
     } else { 
      // $article is NULL, cannot use it as an object 
     } 
    } 
} 

當您在不傳遞值的情況下調用show(),則參數$article將使用默認值(本例中爲NULL)進行初始化。

$controller = new ArticleController(); 
$news  = new Article(); 

$controller->show($news); 
// inside the show() method, $article is set to $news 

$controller->show(); 
// no argument was passed, $article is NULL inside show() 
+0

你的意思是說,如果我使用show(article $ article)它會將$ article設置爲null?如果沒有,那麼我不想將我的變量設置爲null – VeRJiL

+0

如果沒有設置'$ article'(意味着它沒有被傳遞),它會將它的值設置爲'null',從而使'$ article'的任何原始使用都無用。 – Script47

+0

@VeRJiL不,當函數被調用時使用默認值*,而沒有參數值。 – axiac

0

在PHP中,您可以設置你的價值觀,如:

class ArticleController 
{ 
    public function show(Article $article = null) 
    { 
    // some logic here 
    } 
} 
+0

這個答案雖然正確,但並不能滿足這樣一個事實:如果在$ article是null的時候類繼續執行,可能會拋出一個錯誤。 – Script47

+0

是的,這是真的。 –

相關問題