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

Php 从函数返回布尔值后检查布尔值,php,class,Php,Class,我完全困惑:为什么我的函数方法不起作用 我有一个小问题,我不确定它是从哪里来的,但是我想首先检查我的if语句是否是原因,然而在java中ifvar{//var is true}可以工作,但是在PHP中,它似乎比我对布尔的理解更复杂 我试图在返回true后检查布尔值是否为true;从我在检查中使用的函数 我的一些代码是这样的 IF:IF$user->userValidMC$\u POST['username']==true 功能: public function userValidMC($

我完全困惑:为什么我的函数方法不起作用

我有一个小问题,我不确定它是从哪里来的,但是我想首先检查我的if语句是否是原因,然而在java中ifvar{//var is true}可以工作,但是在PHP中,它似乎比我对布尔的理解更复杂

我试图在返回true后检查布尔值是否为true;从我在检查中使用的函数

我的一些代码是这样的

IF:IF$user->userValidMC$\u POST['username']==true 功能:

    public function userValidMC($user){

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

        return $minecraftOutput;

    }

我是在检查什么错误,还是我的代码完全错误了函数?

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

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

该方法将实际返回字符串。已使用url进行测试,请将if更改为:

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

另一种方法(我更喜欢)是将方法更改为:

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 

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

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

另一种方法(我更喜欢)是将方法更改为:

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 

file\u get\u contents将返回文件的内容,或返回false


使用triple=意味着比较值和类型,因此您的意思是,如果该函数返回的布尔值为TRUE,而它不会返回TRUE,

file\u get\u contents将返回文件的内容,或者返回false


使用triple=意味着比较值和类型,因此您的意思是,如果该函数返回的布尔值为TRUE,而它不会返回,则远程服务将返回一个字符串,即“TRUE”或“false”,因此返回值应为:

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

远程服务返回字符串“true”或“false”,因此返回值应为:

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

if-you-posted检查函数userValidMC是否返回true,请注意,您使用的是===,因此您检查的是实际的true布尔值,而不仅仅是值是否使用==计算为true

if($user->userValidMC($_POST['username']) === true)
但是,该函数返回文件\u get\u内容的结果

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

您可以通过以下方式检查结果:

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

if-you-posted检查函数userValidMC是否返回true,请注意,您使用的是===,因此您检查的是实际的true布尔值,而不仅仅是值是否使用==计算为true

if($user->userValidMC($_POST['username']) === true)
但是,该函数返回文件\u get\u内容的结果

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

您可以通过以下方式检查结果:

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

“file\u get\u contents”成功时返回字符串,失败时返回false

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

return $minecraftOutput !== false;
将返回一个布尔值

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

return $minecraftOutput === "expectedValue";
如果你想不那么严格:

if($user->userValidMC($_POST['username']) == true)
将传递大多数长度大于0的字符串,但从函数中返回严格的布尔值更安全


请参阅:

成功时,“file\u get\u contents”返回字符串,失败时返回false

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

return $minecraftOutput !== false;
将返回一个布尔值

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

return $minecraftOutput === "expectedValue";
如果你想不那么严格:

if($user->userValidMC($_POST['username']) == true)
将传递大多数长度大于0的字符串,但从函数中返回严格的布尔值更安全


请参阅:

示例中的URL是否真的返回PHP值true,还是返回字符串true?您正在检查字符串是否为bool类型并设置为true,哪些字符串不是。您的函数似乎没有返回true。非常确定file\u get\u contents返回字符串,您可能希望找到一些无效用户的指示来生成布尔值。您的示例中的URL是否真的返回PHP值true,还是返回字符串true?您正在检查字符串是否为bool类型并设置为tr
ue,哪些字符串不是。您的函数似乎没有返回true。非常确定file\u get\u内容返回字符串,您可能希望找到无效用户的指示以生成布尔值。失败时,file\u get\u内容将返回FALSE。确实如此。谢谢你的提示。失败时,file\u get\u内容将返回FALSE。它确实如此。感谢你的提醒。+1:虽然我看到这一点时会关闭快门,但我知道,在出现故障时,变通方法-file_get_内容将始终返回布尔值false,但其他任何内容都不一致@MichaelPerrenoud是的,如果url将返回404,则文件内容将返回boolfalseThank you,这似乎与Jack的答案一致。遗憾的是,我不能将两个答案作为解决方案+1:虽然当我看到这一点时,我会关闭快门,但我知道解决方案-文件\u get\u内容在出现故障时将始终返回布尔值false,但其他任何内容都不一致@MichaelPerrenoud是的,如果url将返回404,则文件内容将返回boolfalseThank you,这似乎与Jack的答案一致。遗憾的是,我不能将两个答案作为解决方案!我认为由于404错误,文件获取内容将失败。让我们看看这是什么says@hek2mgl不,它显然返回stringfalse,因此有理由假设它在成功时为stringtrue:是的,我现在已经为自己进行了测试。真不敢相信;。接得好+1认为由于404错误,文件获取内容将失败。让我们看看这是什么says@hek2mgl不,它显然返回stringfalse,因此有理由假设它在成功时为stringtrue:是的,我现在已经为自己进行了测试。真不敢相信;。接得好+1.