use*_*841 14 php evaluation variable-assignment
我有一个关于php的'基础'问题.在示例代码中fgets
,它将此代码段作为读取文件内容的示例:
while (($buffer = fgets($handle, 4096)) !== false) {
echo $buffer;
}
Run Code Online (Sandbox Code Playgroud)
声明($buffer = fgets($handle, 4096))
如何具有价值?这是一种作业+评价$buffer
吗?我的意思是,它如何获得它的价值?这有名字吗?我注意到它使用了严格的比较,所以所有赋值都评估为布尔值true或false?
如果我想编写一个可以这样对待的函数,除了在某些条件下返回false之外,我是否必须做一些特殊的事情?
Nik*_*kiC 18
在PHP中,赋值是一个表达式,即它返回一个值.$buffer = fgets($handle, 4096)
将首先分配值$buffer
,然后返回指定的值.
所以,基本上,你可以写:
$buffer = fgets($handle, 4096);
while ($buffer !== false) {
echo $buffer;
$buffer = fgets($handle, 4096);
}
Run Code Online (Sandbox Code Playgroud)
在这里,您将在单独的一行上进行分配.因为在这种情况下您需要复制赋值,所以首选循环条件中的赋值.
PS:while循环中赋值的最常见示例可能是从mysql中获取行:
while ($row = mysql_fetch_assoc($result)) {
echo $row['firstname'] . ' ' . $row['lastname'];
}
Run Code Online (Sandbox Code Playgroud)
当您在 PHP 中进行赋值时,赋值会返回所分配的值。这允许您评估条件、循环或其他表达式中的赋值。
var_dump ($var = 'test');
Run Code Online (Sandbox Code Playgroud)
这会导致“test”被分配给 $var,并且还会显示新分配的 $var 值。
上面的代码示例在同一个操作中执行赋值和测试,这是一种很常见的程序员简写。fgets() 从打开的文件返回一行,如果没有行返回,则返回 false。你可以做
while ($buffer !== false) {
echo $buffer;
$buffer = fgets($handle, 4096);
}
Run Code Online (Sandbox Code Playgroud)
但是您当然必须在进入循环之前将 buffer 设置为非 false 值(通过在循环之前执行 fgets,或者分配一个不会显示但不是 false 的值,例如空字符串)。
或者你可以进一步简化:
while ($buffer = fgets($handle, 4096) !== false) {
echo $buffer;
}
Run Code Online (Sandbox Code Playgroud)