我在我的视图层中使用PHP作为模板语言, 是否可以使下面的一些更清晰和更简洁?PHP模板中的未定义变量
//in temp.phtlm
<?= (isset($user['name'])) ? $user['name'] : null; ?>
不幸的是,我们甚至不能定义一个函数,该函数:
// as you know yet a notice is generated when calling function with undefined parameter
function out($var)
{
return (isset($var)) ? htmlentities($var) : null;
}
在PHP中使用'@'是一个不好的习惯。我希望你不会这样。它不是一种替代方法 - 你现在如何将方法应用到'$ user ['name']'? 'htmlentities(@ $ user ['name'])'或'@htmlentities($ user ['name'])'或'@htmlentities(@ $ user ['name'])'?避免使用'@'的简单规则是始终将变量传递给模板。我知道这个解决方案似乎很迷人,但有时候你只需要做一些例程来准备数据以避免这种攻击(我认为'@'应该被认为是'PHP'中的黑客攻击)。只是一个预防措施。 – Nemoden
@Nemoden这是'(isset($ user ['name']))的最佳解决方案? $ user ['name']:null;'在模板中。您可以使用它来代替隐藏通知。 'htmlentities(@ $ user ['name'])或@htmlentities($ user ['name'])或@htmlentities(@ $ user ['name'])'完全可以。实际上,'@'最适合这种情况。 – PHPst
这不是最好的解决方案。阅读http://php.net/manual/en/language.operators.errorcontrol.php:“请注意,使用@是很慢的,因为PHP会以这种方式抑制错误,这是在速度和方便“。而且它的速度很慢, - 在代码中处理每个“@”需要额外的2ms超过'isset'(据我的测试记忆)。错误抑制永远不是一个“最佳解决方案” - 您只需闭上眼睛,而不是像您应该做的那样正常处理错误(甚至是通知)。 – Nemoden