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