取消设置变量而不检查它是否已被使用或声明。它在PHP中是否有效:(a)或(b)?虽然两者都有效。在下面的示例代码中,使用了正向引用,PHP如何在内部处理它?</ p>
(a)中
while(stmt1->fetch())
{
unset($data);
$i=0;
while(stmt2->fetch())
{
//Some code.......
$data[$i] = $some_Value;
$i++;
}
}
(b)
while(stmt1->fetch())
{
if(isset($data))
{
unset($data);
}
$i=0;
while(stmt2->fetch())
{
//Some code.......
$data[$i] = $some_Value;
$i++;
}
}
答案 0 :(得分:3)
不是取消设置变量,而是使用初始值设置它。这样可以更清楚地传达意图。
此外,您无需跟踪$i
以插入新元素:
while ($stmt1->fetch()) {
$data = []; //Initialize empty array. This is PHP 5.4+ syntax.
while ($stmt2->fetch()) {
$data[] = $someValue; //$array[] means "Push new element to this array"
}
}
答案 1 :(得分:2)
方法 B 不是必需的。如果你取消设置一个不存在的变量就不会发生任何事情,你就不会得到一个未定义的变量错误。
您可以看到此行为here(它有error_reporting(E_ALL)
)。
答案 2 :(得分:0)
万一你看到它是其他一些代码,我已经看过类似下面的代码(它不是真正的代码,只是为了了解用例)。
isset使用类似&#34; isset和有效值&#34;。我不是说它的好习惯(当然不是,在这个简化的例子中更糟糕),它只是表明,通过重载的魔术方法,它可能有一定道理。
class unsetExample {
private $data = 'some_value';
public function __isset($name) {
if ($this->${name} != 'my_set_value') {
return false;
} else {
return true;
}
public function __unset($name) {
unset($this->${name});
echo 'Value unset';
}
}
$u = new unsetExample;
if (isset($u->data)) {
unset($u->data);
} else {
echo 'In that case I don\'t want to unset, but I will do something else instead';
}
编辑:更改了代码,它现在的真实代码更多