1

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

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

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

我的一些代码是这样的。

如果:if($user->userValidMC($_POST['username']) === true 功能:

    public function userValidMC($user){

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

        return $minecraftOutput;

    }

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

4

6 回答 6

3

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

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

这是因为如果用户存在,该方法将返回页面内容而不是 boolean true。但是您正在测试=== true. 但是如果用户不存在,该方法将返回 falsefile_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 
于 2013-05-03T14:05:23.873 回答
2

远程服务返回一个字符串,要么 要么'true''false'所以返回值应该是:

return trim($minecraftOutput) === 'true';
于 2013-05-03T14:08:33.183 回答
0

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

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

return $minecraftOutput !== false;

将返回一个布尔值。

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

return $minecraftOutput === "expectedValue";

如果您想不那么严格:

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

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

请参阅:PHP 类型比较

于 2013-05-03T14:13:12.353 回答
0

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

于 2013-05-03T14:05:23.530 回答
0

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

使用三重 = 意味着比较值和类型,所以你说如果该函数返回一个布尔值 TRUE,它不会,

于 2013-05-03T14:05:42.097 回答
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)
于 2013-05-03T14:09:05.610 回答