php - 具有不同返回值的函数链接?

标签 php function return-value chaining

是否可以根据上下文(如何使用返回值)让方法返回不同的值?例如,一个方法是否可以在与箭头运算符一起使用以调用另一个方法(即链接方法调用)时返回 $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/

相关文章:

php - 在PHP中模拟友元类

php - 为什么我的 laravel 5 将 html 渲染为字符串而不是 dom?

php - RegExp PHP 显示最小匹配

javascript - 有没有办法简化这段 JavaScript 代码? (多个类的相同功能)

c - 如果函数有错误返回什么?

scala - 在 scala 中将 Int 添加到字符串

php - 验证数组是否已存在于 mysql php laravel 中

php - 如何在不转到 php.ini 文件的情况下禁用 eval 函数?

python - 将字符串中的字符与其索引号相乘

c - 函数返回值没有返回语句