在 php 中评估赋值

2022-08-30 22:05:29

我有一个关于php的“基础”问题。在 fgets 的示例代码中,它包含以下代码段作为读取文件内容的示例:

while (($buffer = fgets($handle, 4096)) !== false) {
    echo $buffer;
}

语句如何具有值?是一种赋值+评价吗?我的意思是,它是如何获得价值的?这有名字吗?我注意到它使用严格的比较,那么所有赋值的计算结果都是布尔值真还是假?($buffer = fgets($handle, 4096))$buffer

如果我想编写一个可以这样处理的函数,除了在某些条件下返回false之外,我是否必须做任何特殊的事情?


答案 1

在 PHP 中,赋值是一个表达式,即它返回一个值。 将首先将值赋值,然后返回赋值。$buffer = fgets($handle, 4096)$buffer

所以,基本上,你可以写:

$buffer = fgets($handle, 4096);
while ($buffer !== false) {
    echo $buffer;

    $buffer = fgets($handle, 4096);
}

在这里,您将在单独的行上进行分配。因为在这种情况下,您需要复制赋值,因此循环条件中的赋值是首选。

PS:while循环中最常见的赋值示例可能是从mysql中提取行:

while ($row = mysql_fetch_assoc($result)) {
    echo $row['firstname'] . ' ' . $row['lastname'];
}

答案 2

在 PHP 中执行赋值时,赋值将返回已赋值。这允许您在条件、循环或其他表达式中计算赋值。

var_dump ($var = 'test');

这会导致将“test”分配给$var,并显示新分配的$var值。

上面的代码示例在同一操作中执行赋值和测试,这是一种非常常见的程序员速记。fgets() 从打开的文件中返回一行,如果没有要返回的行,则返回 false。你可以做

while ($buffer !== false) {
    echo $buffer;
    $buffer = fgets($handle, 4096);
}

但是您当然必须在进入循环之前将缓冲区设置为非假值(通过在循环之前执行fgts,或分配一个不会显示但不是假的值,例如空字符串)。

或者你可以进一步简化:

while ($buffer = fgets($handle, 4096) !== false) {
    echo $buffer;
}

推荐