2017-09-11 21 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

是的,这是真的。 –

相关问题