php三元速记用于模板

时间:2013-09-07 09:47:37

标签: php templates ternary

我正在用Kohana构建我的第一个应用程序,并在其中使用基本的模板系统。在我的模板中,我想为页面的各种内容回显变量,但只有在设置了每个变量的情况下,我才想让模板中的代码尽可能短,所以像这样:

<?=$foo?>
如果设置变量,

工作正常,但如果不是,我会收到通知。所以我认为一个三元运算符可以很好地完成这个任务:

<?=$foo?:''?>

根据PHP手册,从5.3可以省略中间部分,如果没有设置变量,上面应该输出任何内容,但我仍然会收到错误通知。“注意:未定义变量:foo in / “

我可以通过稍微修改来获得所需的结果来抑制通知:

<?=@$foo?:''?>

但是我知道这通常不是困难的做法,如果可能的话想要更好的解决方案,同时仍然在模板文件中将代码保持在最低限度。

以下作品,但它并不简洁(主要是因为我的实际变量可能很长):

<?=isset($foo)?$foo:'';?>
我错过了什么或做错了吗?

2 个答案:

答案 0 :(得分:2)

三元操作并不是要用isset()取代检查 - 它需要定义变量,否则你会收到通知。

模板引擎通常提供一种使用默认值的方法,但它们也不使用纯PHP代码。你在这里运气不好:要么禁止通知,要么使用更长的代码变体。或者确保设置了每个变量,这使您可以将任何通知视为错误。

答案 1 :(得分:1)

为了避免未定义变量的注意事项,您可以创建自定义函数,该函数通过引用获取第一个参数

function tplvar(&$value, $default = '') {
    return ($value !== null) ? $value : $default;
}

<?=tplvar($foo, 'bar');?>

通过引用传递的未初始化变量将被视为null s。