PHP类方法何时返回或不返回

PHP类方法何时返回或不返回

问题描述:

在类中,我创建了一个set方法,如果接受数据的是被调用的。PHP类方法何时返回或不返回

<?php 
    public function set_name($name) 
    { 
    $this->name = ucwords(trim($name)); 
    // return $this->name; 
    } 
    ?> 

我的问题是,我必须返回函数的结果还是不必要的。如果不是为什么?我知道在display()方法中你必须像这样返回:return $ this-> name ;.我很困惑。

+0

是否从方法返回取决于你的应用程序需要什么,如果(例如)你想要一个流畅的接口,你会返回'$ this' ...但是没有正确或错误的答案。如果你没有提供return语句,PHP实际上会返回一个空值 – 2014-09-25 13:52:08

+0

请提供一些代码并澄清你的问题 – thpl 2014-09-25 13:52:27

+0

显示你做了什么?你的代码 – Gopal 2014-09-25 13:53:05

您不必返回任何东西。

但是,对某些函数返回某些内容以对其执行测试(即使它是真或假)来澄清函数正确执行是一种很好的做法。

鉴于你的代码,一般来说,我个人不会在setter上设置回报。所以没有任何回报是可以的。

例如,您可能想测试你的名字只包含字母和返回false,如果它不

<?php 
public function set_name($name) { 
    if(preg_match("/[A-Za-z]+/", $name) { 
     $this->name = ucwords(trim($name)); 
     return true; 
    } else { 
     return false; 
    } 

} 
?> 

然后你会被称之为:

<?php 
     if(!set_name($name)) { 
      echo "There was an error"; 
     } 
?> 

然而,这不符合mvc框架。

+2

投掷异常对于函数是否正确执行是非常有效的选择 – 2014-09-25 13:53:29

在面向对象的编程语言中返回值是最好的。否则,当你的网站变得越来越大并且容易出错时,它会变得幼稚和难以维护错误。

您不必在setter函数中返回结果,最好的用法是使一些getter函数获取数据。

否则我用setter的观点是返回$ this。用这个小技巧,你可以链接setter函数。

对于为例:

class C 
{ 
    private $arg; 
    private $arg2; 

    function setArg($NewArg) 
    { 
     // your tests or so 
     $this->arg = $NewArg; 
     return $this; 
    } 

    function setArg2($NewArg) 
    { 
     // your tests or so 
     $this->arg2 = $NewArg; 
     return $this; 
    } 

    function getArg() 
    { 
     return $this->arg; 
    } 

    function getArg2() 
    { 
     return $this->arg2; 
    } 
} 

而且你可以用这种方式:

$Item = new C(); 
$Item->setArg('hello') 
    ->setArg2('hi'); 

$Item->getArg(); // return 'hello' 
$Item->getArg2(); // return 'hi' 

它更多的语义在这种情况下。我期望一个名为set_name的函数给我起个名字吗?不,不是,那听起来很愚蠢。在这种情况下,我不会返回任何东西。

由于函数只能做一件事,你应该总是能够选择减少到二进制“是的,我希望它返回的东西”或“不,没有任何意义”的决定。

一般来说,你的方法应该做的是有人会期望他们只是通过看他们的名字(有些人会讨厌我这么说)。

它总是一个好主意,把自己在谁拥有你的代码工作程序员的位置。如果不得不使用一种叫做:set_name()的方法,他永远不会期望它返回一些东西。

你的方法总是应该做的什么人会期望他们做的抱怨通过异常的外部环境。不多,不少。

如果您将此付诸实践:恭喜。您刚刚为方法建立了一个伟大而可靠的警报方法,这些方法做得太多了seperation of concerns),并且您更接近干净的软件设计。

当然,这不是你强迫地狱或高水(没有)的东西,但这是你需要自己决定的事情。如果因为任何原因(例如方法链接,这已被多次提及)无法这样做,您可以提供一个良好的类文档并清楚说明方法实际执行的操作。