我正在尝试使用PHP进行延迟变量评估。已解决的示例代码:
<?php
function title($page)
{
return $page . ' - $_GET["title"]';
}
?>
<title><?= title($_SERVER['SCRIPT_NAME']) ?></title>
$_GET['title']
未被评估。我怎样才能做到这一点?
答案 0 :(得分:8)
根据the documentation,单引号内的变量引用不会被评估。使用双引号或简单连接:
function title($page)
{
return $page . ' - ' . $_GET["title"];
}
使用htmlspecialchars()
时,您应始终在HTML中使用时正确转义变量。
<title><?= htmlspecialchars(title($_SERVER['SCRIPT_NAME'])); ?></title>
答案 1 :(得分:1)
这是你可以做一些懒惰评估的一种方式:
<?php
$_GET["title"] = ""; // faking a GET with a missing title
function title($page)
{
$title = htmlentities($_GET["title"]);
return $page . ' - ' . ($title = $title?: 'missing title');
}
echo title( htmlentities( $_SERVER['SCRIPT_NAME'] ) );
?>
如果有任何类型的标题会显示但是如果它丢失了,那么用户会收到通知。我利用了&#39;?:&#39;运算符,如果$ title保持错误值,则确保为$ title分配右侧操作数的值。注意,除了使用布尔运算器以及逻辑运算符和逐位运算符之外,PHP通常不会使用惰性求值。本书虽然是&#39;在尝试实例化缺少构造函数的类时传递参数的奇怪情况在这种情况下,当操作码生成与该参数有关时,它永远不会执行,因此表达式永远不会评估。