让我发布有问题的代码:
session_start(); // some text
$Var = "";
if (isset($_SESSION['id'])) {
// some conditions
$userid = $_SESSION['id'];
$username = $_SESSION['username'];
$var = some links or text here ;
}
else
{
$var = link or text here;
}
问题是:为什么$var="";
首先被声明,然后进一步向下被用于if
条件。我想了解它的逻辑,为什么我可以这样写。
$var=header("Location: link.php");
答案 0 :(得分:1)
尽管PHP在您使用某些语言的方式之前不要求“声明”变量,但在编写代码时表达您的意图会很有用。在分配变量之前可以使用变量(它的值将被视为null
),但是IDE和代码检查器以及PHP本身会将此标记为警告,因为您可能有错误地键入了错误的变量名称。
在代码段开头为变量分配空值也可以防止在代码重新排列时“泄漏”的值,例如,如果添加了循环。你可以从这开始:
if ( some_check($something) )
{
$var = 'something';
}
echo $var;
但稍后将其展开:
foreach ( $some_array as $some_item )
{
if ( some_check($some_item) )
{
$var = 'something';
}
echo $var;
}
这里的一个微妙的错误是,$var
第一次成为'something'
时,它在循环的后续运行中永远不会被“清除”。将变量“初始化”为空字符串使其在某种意义上“开始和结束”时显而易见。
所以你可以从这开始:
$var = '';
if ( some_check($something) )
{
$var = 'something';
}
echo $var;
......然后自然会变成这样:
foreach ( $some_array as $some_item )
{
$var = '';
if ( some_check($some_item) )
{
$var = 'something';
}
echo $var;
}
答案 1 :(得分:0)
我们经常需要在条件范围之外声明一个变量,以便我们可以在条件范围之后再次使用该变量。 例如,在循环内部计数时,循环完成后,我们要显示计数变量。
关于$var=header("Location: link.php");
,header
函数返回void,因此使用var来存储结果是没用的,但对于其他非void函数,它有时非常方便。