是否可以根据上下文(如何使用返回值)让方法返回不同的值?例如,一个方法是否可以在与箭头运算符一起使用以调用另一个方法(即链接方法调用)时返回 $this
,但在未以这种方式使用返回值时返回标量?
案例一:
$result = $test->doSomething1(); // returns 4
// $result returns 4
案例二:
$result = $test->doSomething1()->doSomething2();
// doSomething1() returns $this
// doSomething2() returns 8
有没有办法执行这样的行为?
最佳答案
如果我正确理解了这个问题,您需要一个方法 (doSomething1
) 来根据调用链的其余部分返回一个值。不幸的是,您绝对无法做到这一点。
“所有”语言共享的通用编程范式(方法、运算符等如何在语法上下文中工作)规定表达式 $this->doSomething1()
的结果必须在可以考虑可能调用 ->doSomething2()
的结果之前计算出来。静态类型和动态类型语言以不同的方式实现这一点,但共同点是表达式 $this->doSomething1()
必须独立于后面或不后面的内容来考虑。
简而言之:$this->doSomething1()
在这两种情况下都必须返回特定类型的值。在 PHP 中,没有办法让一种值在一个上下文中表现得像一个数字,而在另一个上下文中表现得像一个具有调用方法的对象。
关于php - 具有不同返回值的函数链接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9913937/