从函数中获取多个数据

时间:2011-10-21 12:43:27

标签: php

这是一个简单的功能

function check_nickname($item)
{
    if (preg_match('/^[a-z\d_]{1,15}$/', $item)) {
    return true;
  } else {
    return false;
  }
}

它只返回true或false。

但如果它是假的,我希望它返回False +字符串中的某些文本或其他东西。

if(check_nickname($item))

将获得true / false。但如果它是假的,那我怎么能回复一些文字串呢?

5 个答案:

答案 0 :(得分:5)

为此,您需要将变量发送到可在函数内修改的函数。你用引用来做到这一点。示例解释它比单词更好;

function check_nickname($item, &$sometext)
{
    if (preg_match('/^[a-z\d_]{1,15}$/', $item)) {
    return true;
  } else {
    $some_text = 'enter your message here';
    return false;
  }
}

if(!check_nickname($item, $txt))
{
   echo $txt; // echoes "enter your message here";
}

答案 1 :(得分:2)

您有几种选择。

1。通过引用传递参数

您可以更改方法签名以传入字符串引用,例如:

function check_nickname($item, &$output)

并在函数体中将输出设置为您想要的值,例如:$output = "some text";

2。返回数组

或者,您也可以返回一个数组(或一个对象),而不仅仅是一个布尔值:

return array(true, "some text");

3。封装类

中的功能

另一种选择是将此功能封装在一个类中。 这意味着最初要编写更多代码,但会使消费代码更具可读性。

class NickNameChecker {
    private $nick;
    private $reason;

    public function __construct($nickname) {
        $this->nick = $nickname;
    }
    public function check() {
        if (preg_match('/^[a-z\d_]{1,15}$/', $this->nick)) {
            return true;
        }
        $this->reason = "some text";
        return false;
    }
    public function getReason() {
        return $this->reason;
    }
}

// usage:
$checker = new NickNameChecker("brian griffin");
if (!$checker->check()) {
    echo $checker->getReason();
}

答案 2 :(得分:0)

干净的方法可能是使用异常机制。如果为false,则会抛出包含所需消息的异常。

答案 3 :(得分:0)

我只是

if (!check_nickname($item)) $message = "Martian names not accepted!";

答案 4 :(得分:-1)

return array(false, "some other string");

然后myFunction()[0] falsemyFunction()[1] "some other string"