Skip to content

变量作用域

您可以选择将变量分配给主 Smarty 对象的作用域,使用 createData() 创建的数据对象的作用域,以及使用 createTemplate() 创建的模板对象的作用域。这些对象可以进行链式操作。模板可以看到其自身对象的所有变量,以及分配给其父对象链中的对象的所有变量。

默认情况下,通过 $smarty->display(...)$smarty->fetch(...) 调用呈现的模板会自动链接到 Smarty 对象的变量作用域。

通过将变量分配给单独的数据对象或模板对象,您可以完全控制模板可以访问的变量。

<?php
// 分配变量给 Smarty 对象作用域
$smarty->assign('foo','smarty');

// 分配变量给数据对象作用域
$data = $smarty->createData();
$data->assign('foo','data');
$data->assign('bar','bar-data');

// 分配变量给其他数据对象作用域
$data2 = $smarty->createData($data);
$data2->assign('bar','bar-data2');

// 分配变量给模板对象作用域
$tpl = $smarty->createTemplate('index.tpl');
$tpl->assign('bar','bar-template');

// 分配变量给模板对象作用域,并链接到 Smarty 对象
$tpl2 = $smarty->createTemplate('index.tpl',$smarty);
$tpl2->assign('bar','bar-template2');

// 此 display() 可以看到来自 $smarty 对象的 $foo='smarty'
$smarty->display('index.tpl');

// 此 display() 可以看到来自数据对象 $data 的 $foo='data' 和 $bar='bar-data'
$smarty->display('index.tpl',$data);

// 此 display() 可以看到来自数据对象 $data 的 $foo='data' 和来自数据对象 $data2 的 $bar='bar-data2'
$smarty->display('index.tpl',$data2);

// 此 display() 可以看到来自模板对象 $tpl 的 $bar='bar-template'
$tpl->display();  // 或者 $smarty->display($tpl);

// 此 display() 可以看到来自模板对象 $tpl2 的 $bar='bar-template2' 和来自 Smarty 对象 $foo='smarty'
$tpl2->display();  // 或者 $smarty->display($tpl2);

另请参见 assign()createData()createTemplate()