0

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

<?=$foo?>

如果设置了变量,则工作正常,但如果不是,我会收到通知。所以我认为三元运算符会很好地解决这个问题:

<?=$foo?:''?>

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

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

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

但我知道这通常不会受到困扰,如果可能的话,我希望有一个更好的解决方案,同时仍将模板文件中的代码保持在最低限度。

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

<?=isset($foo)?$foo:'';?>

我错过了什么或做错了什么?

4

2 回答 2

2

三元运算并不是要替换检查isset()- 它需要定义变量,否则您会收到通知。

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

于 2013-09-07T09:57:49.047 回答
1

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

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

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

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

于 2013-09-07T10:17:35.220 回答