我完全糊涂了:为什么我的功能方法不起作用?
我有一个小问题,我不知道它来自哪里,但我想首先检查我的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;
}
我是在检查错误,还是我的代码完全错误(函数)?
答案 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的字符串,但是从函数中返回一个严格的布尔值会更安全。