从函数返回布尔值后检查布尔值

时间:2013-05-03 14:02:44

标签: php class

我完全糊涂了:为什么我的功能方法不起作用?

我有一个小问题,我不知道它来自哪里,但我想首先检查我的IF语句是否是原因,但在java if(var){ //var is true }中有效,但在PHP中,它似乎比我对布尔的理解更复杂。

我试图从我用过的函数中获取return true;后检查布尔值是否为真。

我的一些代码就是这个。

IF:if($user->userValidMC($_POST['username']) === true FUNCTION:

    public function userValidMC($user){

        // grab data
        $minecraftOutput = file_get_contents('https://www.minecraft.net/haspaid.jsp?user=' . $user . '');

        return $minecraftOutput;

    }

我是在检查错误,还是我的代码完全错误(函数)?

6 个答案:

答案 0 :(得分:3)

该方法实际上会返回一个字符串。 (已使用this网址进行测试)将if更改为:

if($user->userValidMC($_POST['username']) !== 'false' 

这是因为如果用户存在,该方法将返回页面内容而不是布尔值true。但是你正在测试=== true。但是如果用户不存在,则该方法将返回false,因为file_get_contents()失败。所以你应该检查一下。

另一种方式 - 我更喜欢 - 是将方法更改为:

public function userValidMC($user){
    // grab data
    // the page will return the string 'false' if the user does not exist
    $minecraftOutput = file_get_contents('https://www.minecraft.net/haspaid.jsp?user=' . $user . '');
    return $minecraftOutput !== 'false';
}

...和(原始)if声明:

if($user->userValidMC($_POST['username']) === true 

答案 1 :(得分:2)

远程服务返回一个字符串'true''false',因此返回值应为:

return trim($minecraftOutput) === 'true';

答案 2 :(得分:0)

您将返回file_get_contents的结果 它包含文件的内容,而不是布尔值 我建议您检查文件是否存在,然后查看内容是否有长度。

答案 3 :(得分:0)

file_get_contents将返回文件的内容,或者返回false。

使用triple =表示比较值和类型,所以你要说的是该函数是否返回一个TRUE的布尔值,它不会,

答案 4 :(得分:0)

如果您发布了检查函数“userValidMC”返回true,请注意您使用的是===,因此您要检查实际的“true”布尔值,而不仅仅是将值计算为true(使用==)。

if($user->userValidMC($_POST['username']) === true)

但是,该函数返回file_get_contents(http://php.net/manual/en/function.file-get-contents.php

的结果

此函数返回文件内容或失败时返回false,因此它永远不会返回true。

您可以这样检查结果:

if($user->userValidMC($_POST['username']) !== false)

答案 5 :(得分:0)

'file_get_contents'在成功时返回一个字符串,在失败时返回false。

如果你只是测试你从呼叫中获得了有效的响应,那么:

return $minecraftOutput !== false;

将返回一个布尔值。

或者如果您正在检查响应中的特定值,那么:

return $minecraftOutput === "expectedValue";

如果你想要不那么严格,那么:

if($user->userValidMC($_POST['username']) == true)

将传递(大多数)长度大于0的字符串,但是从函数中返回一个严格的布尔值会更安全。

请参阅:PHP type comparisons

相关问题