首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

Smarty 變數使用全攻略:標量、陣列、物件、運算與模板存取語法

     編輯:PHP 綜合知識

前言

Smarty 模板僅能存取透過 assign() 傳遞的變數。本文系統整理支援的資料類型(標量、索引/關聯/多維陣列、物件)、模板存取語法(點號、中括號、箭頭)、變數運算與實戰範例。

資料類型與 assign 範例

require 'init.inc.php';

$tpl->assign('title', '首頁標題');                    // string
$tpl->assign('count', 42);                            // int
$tpl->assign('price', 199.9);                         // float
$tpl->assign('active', true);                         // bool

$tpl->assign('idxArr', ['蘋果', '香蕉', '橘子']);      // 索引陣列
$tpl->assign('assocArr', ['id' => 1, 'name' => '張三']); // 關聯陣列
$tpl->assign('matrix', [                              // 二維索引陣列
    ['A1', 'A2', 'A3'],
    ['B1', 'B2', 'B3']
]);
$tpl->assign('assocMatrix', [                         // 二維關聯陣列
    'row1' => ['col1' => 'v1', 'col2' => 'v2'],
    'row2' => ['col3' => 'v3', 'col4' => 'v4']
]);
$tpl->assign('mixedArr', [                            // 混合陣列
    'first' => ['a', 'b'],
    ['c', 'd']
]);

// 物件 (public 屬性/方法可存取)
class User {
    public $name = '李四';
    public $age = 25;
    public function greet() { return "Hello, I'm {$this->name}"; }
}
$tpl->assign('userObj', new User());

// 變數運算
$tpl->assign('a', 10);
$tpl->assign('b', 20);

$tpl->display('index.tpl');

模板存取語法 (index.tpl)

{$title}

計數:{$count}

價格:{$price}

狀態:{if $active}啟用{else}停用{/if}

索引陣列

{$idxArr[0]}, {$idxArr[1]}, {$idxArr[2]}

二維索引陣列

{$matrix[0][0]}, {$matrix[0][1]}, {$matrix[0][2]}

{$matrix[1][0]}, {$matrix[1][1]}, {$matrix[1][2]}

關聯陣列 (點號存取鍵名)

ID:{$assocArr.id}

姓名:{$assocArr.name}

二維關聯陣列

{$assocMatrix.row1.col1}, {$assocMatrix.row1.col2}

{$assocMatrix.row2.col3}, {$assocMatrix.row2.col4}

混合陣列

{$mixedArr.first[0]}, {$mixedArr.first[1]}

{$mixedArr[0].c}, {$mixedArr[0].d} {* 注意:數字鍵需用中括號 *}

物件屬性與方法

姓名:{$userObj->name}

年齡:{$userObj->age}

問候:{$userObj->greet()}

變數運算

加法:{$a + $b}

混合運算:{$a + $b * $b / $a + 44}

語法規則總結

資料結構PHP 存取Smarty 存取備註
索引陣列$arr[0]{$arr[0]}相同
關聯陣列$arr['key']{$arr.key}點號替代引號
物件屬性$obj->prop{$obj->prop}需 public
物件方法$obj->method(){$obj->method()}需 public,無參數
多維混合$arr['k'][0]{$arr.k[0]}點號+中括號混用

進階技巧

1. 變數存在性檢查

{if isset($var)} 存在 {/if}
{if $var|default:'' ne ''} 有值 {/if}

2. 陣列長度

{$arr|@count}  {* @ 表示對整個陣列操作 *}

3. 變數變數 (動態鍵名)

{$key = 'name'}
{$user.$key}  {* 相當於 $user.name *}

4. 直接在模板定義變數 (assign 标签)

{assign var=localVar value="區域變數"}
{$localVar}

最佳實踐建議

  • 扁平化資料結構:控制器將多維關聯陣列轉為簡單物件/DTO,模板只需 {$user.name},降低模板複雜度。
  • 避免模板邏輯運算:複雜運算在 PHP 完成,模板只做 {$totalPrice} 輸出。
  • 物件封裝:使用 ViewModel 類,僅暴露必要 getter,防止模板存取敏感屬性。
  • 類型提示:PHP 7.4+ 使用型別宣告,IDE 自動完成支援模板變數檢查(配合 PhpStorm Smarty 插件)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved