位置:首頁 > 框架 > Smarty教學 > Smarty對象

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.gitbook.net/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)}