Smarty物件


Objects

物件

SMARTY允許通過模板存取PHP物件。有兩種方式來存取它們。一種是註冊物件到模板,然後通過類似於使用者自定義函式的形式來存取它。另一種方法給模板分配物件,然後通過存取其它賦值變數類似的方法進行存取。第一種方法有一個很好的模板語法,同時它作為一個註冊物件被限制為幾個固定的方法和目標,這樣是比較安全的。然而一個註冊物件不能夠在相對自身陣列裡面迴圈使用和賦值。總之,你根據你自己的需求來覺得選用那種方法,但是使用第一種方法的話,可以讓你的模伴語法達到最小。

 

如果安全選項啟用後,就沒有私有成員或者函式能夠被存取(以"_"開頭)。如果有一個同名成員或者物件存在,那麼方法將被使用。

 

你可以限制成員和函式,但是外解可以通過列舉它們為一個第三註冊變數的陣列的方式來存取它。

 

一般情況下,引數通過模板傳遞給物件的方法和自定義函式獲得引數的方法是一樣的。一個混合陣列作為第一個引數傳遞,而SMARTY物件作為第二個。如果你想像傳統的物件引數一樣一次傳遞一個引數,設定第四個引數為 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.tw511.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)}