在PHP中,一个函数能够拥有多个返回值类型吗?

8

有没有一种方法可以使我的 PHP 函数返回不同的值类型?

下面的代码应该能说明我的意思:

<?php
    public function test($value){
        if($value == 1){
            return "SUCCESS";
        } else {
            return false;
        }
    }
?>

我在某些情况下返回字符串,在其他情况下返回布尔值。这种做法可行吗?

4
如果你在意良好的实践,这是不可能的 :) - Esailija
1
仅仅因为你“能够”做某事,并不意味着你“应该”去做。 - thetaiko
这个例子看起来很糟糕。为什么不直接返回 true 呢? - Brendan Long
@BrendanLong 我相信这只是一个示例,而不是一个“真实世界”的例子。 - Mike Q
这可能是也可能不是 Stack Overflow 问题“*从函数中返回多个值*”的意图。 - Peter Mortensen
6个回答

14

是的,PHP是弱类型语言,因此任何变量都可以接受任何类型。函数返回值也不例外。


1
值得一提的是,许多原生的PHP函数都可以实现这个功能。事实上,手册将其称为“混合”返回类型。 - goat
1
@chris 即使返回类型不是混合的,该函数通常会返回指定的返回类型或false/null。所以,是的,非常普遍 :) - NikiC
在启用严格模式的PHP 7中是不可能的。 - PiKey
@PiKey 只要您不指定显式的返回类型,就可以实现。严格模式对未经过类型定义的代码没有影响。 - NikiC

4
是的,它是可能的(但不建议这样做)。
您至少应该在您的Javadoc注释中声明它。
/**
 * @param int $value
 * @return mixed string|boolean
 **/
public function test($value){
    if($value == 1){
        return "SUCCESS";
    } else {
        return false;
    }
}

即使是PHP内置函数有时也会这样做(例如mysql_connect => 布尔值 | 资源链接)。


0

是的,这是允许的,不像在C、Java等语言中需要定义返回值。


0

是允许的。但是,在你提供的情况下,这并不可取。如果想要一个合理的例子,请看看strpos()函数。


0

我自己也在想,为什么要返回不同的东西呢?这样接收端就需要检查两个东西了吗?

我认为我已经决定返回一个空版本的类型或者一个带有状态元素的数组。

以下是两个例子,说明函数/方法内部可能发生的变化,你基本上被迫检查更多的内容:

<?php
    function test($value) {
        if ($value == 1) {
            $local = successFunction($value);
            return $local;
        }
        else {
            return false;
        }
    }

    $res = test(1);
    if ($res) {
       echo "Are we OK? Right? No? What is this?";
    }

版本 2

    function test($value) {
        if ($value == 1) {
            $local = successFunction($value);
            return $local;
        }
        else {
            return "";
        }
    }

    $res = test(1);
    if (!empty($res)) {
        echo "More likely we are OK.";
    }
?>

-3
可以/可能吗?

没问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接