任何人都可以解释如何在php中为变量分配值。我有以下代码,不能按预期工作(由我)。
if ( $account = $this->getClientAccount($request) )
{
echo $account;
}
如果我使用此代码帐户是1,只有一个。怎么会??? getClientAccount返回字符串(用户名),如果没有找到用户则返回false。当发现用户返回1时。 如果我移动上面的作业if语句,它工作正常。在将if函数返回的数组赋值给if语句中的变量时,我遇到了类似的问题。
修改
好吧,伙计们,我觉得我发现了一些东西,至少对我们所有人来说都是这样。 看看这段代码:http://codepad.org/QWjwl3vQ 我想你会明白发生了什么。试试test1()和test2()
答案 0 :(得分:0)
第一个代码块语法错误。
if
(
$account = $this->getClientAccount($request); // <--- This semicolon here must be removed
)
{
echo $account;
}
答案 1 :(得分:0)
这根本不是一个真正的问题,尝试直接回答是没有意义的,尤其是如果你不熟悉PHP语法。
这是OP的前提必须受到质疑,而不是他发布的代码。
此代码将明确输出getClientAccount方法的结果(除非它为0或空数组)。
因此,OP必须再次检查“实际代码中的” 或验证getClientAccount函数的实际结果。
答案 2 :(得分:0)
编辑后&amp;检查你的代码似乎布尔值正在重写实际值。要摆脱这个问题,你需要在每个条件上使用圆括号进行正确的分配,称为Operator Precedence。
检查我已编辑的code,使其按预期工作。
答案 3 :(得分:0)
$staff_id_id = 0;
$salary = new salary();
$result = $salary -> getSalary($id);
// print_r($result);
$inv = mysqli_fetch_array($result, MYSQLI_ASSOC);
$staff_id = isset($inv['staff_id']) ? $inv['staff_id'] : '';
$present_days = isset($inv['present_days']) ? $inv['present_days'] : '30';
$total_days = isset($inv['total_days']) ? $inv['total_days'] : '30';
$advance_deducted = isset($inv['advance_deducted']) ? $inv['advance_deducted'] : '1';
$installment_deducted = isset($inv['installment_deducted']) ? $inv['installment_deducted'] : '0';
// print_r($inv);
$staff_name1 = isset($inv['staff_id']) ? $inv['staff_id'] : '';
if ($staff_name1 == $staff_id) {
echo $staff_id++;
//print_r($staff_id);
//die();
// echo $staff_name1;
}
if ($staff_id > 0) {
echo "this user had already assign Vouchers";
}
else {
$salary = new salary();
$result = $salary -> getSalary($id);
// print_r($result);
$inv = mysqli_fetch_array($result, MYSQLI_ASSOC);
$staff_id = isset($inv['staff_id']) ? $inv['staff_id'] : '';
//print_r($staff_id);
$date = isset($inv['date']) ? $inv['date'] : '';
$advance_deducted = isset($inv['advance_deducted']) ? $inv['advance_deducted'] : '1';
$installment_deducted = isset($inv['installment_deducted']) ? $inv['installment_deducted'] : '0';
$installment_amount = isset($inv['installment_amount']) ? $inv['installment_amount'] : '';
$paid_amount = isset($inv['paid_amount']) ? $inv['paid_amount'] : '';
$total_days = isset($inv['total_days']) ? $inv['total_days'] : '30';
$present_days = isset($inv['present_days']) ? $inv['present_days'] : '30';
$amount_left = (isset($inv['amount_left']) && $inv['amount_left'] != NULL) ? $inv['amount_left'] : '0';
$salary_id = isset($inv['id']) ? $inv['id'] : '';
答案 4 :(得分:-1)
从if条件中删除分号,如下所示
if
(
$account = $this->getClientAccount($request)
)
{
echo $account;
}
在你的情况下,php会在从getClientAccount()函数获取返回值后检查$ account变量的值。如果$ account值最终意味着为真,那么它将执行你的echo语句。
如果您对php布尔值有任何疑惑,那么您可以尝试另一种方式:
$account = $this->getClientAccount($request);
if(strlen($account)>0){
echo $account;
}
答案 5 :(得分:-1)
语法错误很少。你需要删除已经提到的分号,你需要改为:
$account == $this->getClientAccount($request)
要检查条件,在您尝试将$ account分配给$ this-&gt; getClientAccount($ request)时,会产生if语句。 if语句用于检查不分配值的条件。
此外,$ account必须有一个值,否则如果函数返回一个值,您的条件将始终为false。