Objects
對象
SMARTY允許通過模板訪問PHP對象。有兩種方式來訪問它們。一種是注冊對象到模板,然后通過類似于用戶自定義函數(shù)的形式來訪問它。另一種方法給模板分配對象,然后通過訪問其它賦值變量類似的方法進行訪問。第一種方法有一個很好的模板語法,同時它作為一個注冊對象被限制為幾個固定的方法和目標,這樣是比較安全的。然而一個注冊對象不能夠在相對自身數(shù)組里面循環(huán)使用和賦值。總之,你根據(jù)你自己的需求來覺得選用那種方法,但是使用第一種方法的話,可以讓你的模伴語法達到最小。
如果安全選項激活后,就沒有私有成員或者函數(shù)能夠被訪問(以"_"開頭)。如果有一個同名成員或者對象存在,那么方法將被使用。
你可以限制成員和函數(shù),但是外解可以通過列舉它們?yōu)橐粋€第三注冊變量的數(shù)組的方式來訪問它。
一般情況下,參數(shù)通過模板傳遞給對象的方法和自定義函數(shù)獲得參數(shù)的方法是一樣的。一個混合數(shù)組作為第一個參數(shù)傳遞,而SMARTY對象作為第二個。如果你想像傳統(tǒng)的對象參數(shù)一樣一次傳遞一個參數(shù),設(shè)置第四個參數(shù)為 FALSE即可。
Example 15-1. using a registered or assigned object
<?php
// the object
class My_Object() {
function meth1($params, &$smarty_obj) {
return "this is my meth1";
}
}
$myobj = new My_Object;
// registering the object (will be by reference)
$smarty->register_object("foobar",$myobj);
// if we want to restrict access to certain methods or properties, list them
$smarty->register_object("foobar",$myobj,array('meth1','meth2','prop1'));
// if you want to use the traditional object parameter format, pass a boolean of false
$smarty->register_object("foobar",$myobj,null,false);
// We can also assign objects. Assign by ref when possible.
$smarty->assign_by_ref("myobj", $myobj);
$smarty->display("index.tpl");
?>
// www.yiibai.com/smarty
TEMPLATE:
{* access our registered object *}
{foobar->meth1 p1="foo" p2=$bar}
{* you can also assign the output *}
{foobar->meth1 p1="foo" p2=$bar assign="output"}
the output was {$output)
{* access our assigned object *}
{$myobj->meth1("foo",$bar)} |
|