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

Smarty 取得陣列長度與呼叫 PHP 函數完整技巧(@ 修飾符用法)

     編輯:PHP 綜合知識

在 Smarty 模板中對陣列呼叫 count、end 等 PHP 內建函數時,直接寫 {$arr|count} 會輸出字串 Array 而非長度。正確做法是加上 @ 符號:{$arr|@count}。

@ 修飾符原理

  • Smarty 修飾符預設將變數作為第一個參數傳給函數:count($arr)。
  • 但 count() 接受陣列參數,若直接傳入陣列變數,PHP 會將陣列轉為字串 "Array" 再計算長度(結果為 1)。
  • @ 告訴 Smarty 將變數作為參數陣列展開:count(...$arr) 相當於 count($arr) 正確呼叫。

適用函數類型

函數類型是否需 @範例
陣列操作函數(count, end, reset, key, current, array_sum 等)必須加 @{$arr|@count}, {$arr|@end}
字串函數(strlen, strtoupper, substr, md5 等)可加可不加{$str|strlen} = {$str|@strlen}
其他標量函數通常不需 @

實際範例

<?php
$smarty->assign('items', ['apple', 'banana', 'orange']);
$smarty->assign('title', 'Hello World');
?>
{* 陣列長度 *}
總共 {$items|@count} 種水果<br>

{* 取得最後一個元素 *}
最後是:{$items|@end}<br>

{* 字串長度(不需 @) *}
標題長度:{$title|strlen} 字元<br>

{* 多重修飾符 *}
大寫並截取:{$title|upper|truncate:5}<br>

進階:呼叫自訂 PHP 函數

Smarty 允許註冊自訂修飾符或直接在模板中呼叫 PHP 函數(需開啟 $smarty->security_policy->php_modifiers)。

<?php
function my_format($str, $prefix = '[', $suffix = ']') {
    return $prefix . $str . $suffix;
}
// 註冊為修飾符
$smarty->registerPlugin('modifier', 'my_format', 'my_format');
?>
{$title|my_format:'<':'>'} {* 輸出 <Hello World> *}

最佳實務建議

  • 邏輯盡量前置於 PHP 控制器,模板僅做簡單格式化,避免複雜函數呼叫降低可維護性。
  • 陣列長度、首尾元素等常用操作,建議在 PHP 端預先計算好指派給模板變數。
  • 若專案大量使用 @count,可考慮封裝為專用修飾符 count_arr 統一管理。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved