1

我有两个变量,一个是$video_id包含 youtube 或 vimeo 视频 ID。另一个$video_type包含“youtube”或“vimeo”。

我在php中有两个函数,
youtube_embed($id, $width, $height)
vimeo_embed($id, $width, $height)

我想要做的是调用这个函数将它传递给$video_id

我可以做:

{if $video_type == 'youtube'}
    {$video_id|youtube_embed:123:123}
{elseif $video_type == 'vimeo'}
    {$video_id|vimeo_embed:123:123}
{/if}

但我想知道您是否可以使用变量修饰符名称,例如

{$video_id|`$video_type`_embed:123:123}
4

1 回答 1

1

这是一个坏主意,即使你可以。

如果您这样做,您的代码将来会更清晰地阅读、维护和扩展:

{$video_id|video_embed:$video_type:123:123}

然后在 PHP 中检查 $video_type 并将其传递给适当的修饰符,而不是尝试在模板级别处理它。

function video_embed($video_id, $video_type, $x, $y){
    switch($video_type){
        case('youtube'):
            youtube_embed($video_id, $x, $y);
            break;

        case('vimeo'):
            vimeo_embed($video_id, $x, $y);
            break;

        default:
            throw new UnsupportVideoTypeException($video_type);
    }
}

当您不可避免地需要支持一种新的视频类型时,您只需在 PHP 的 video_embed 函数中添加一些代码,而不是编辑每个显示视频的模板。

为了记录,不,这似乎是不可能的。查看 Smarty 的源代码,它不会在需要修饰符时尝试评估变量。

于 2012-12-11T03:53:36.107 回答