ホームページ > バックエンド開発 > PHPチュートリアル > Smarty_PHP チュートリアルで PHP 組み込み関数を呼び出す方法

Smarty_PHP チュートリアルで PHP 組み込み関数を呼び出す方法

WBOY
リリース: 2016-07-21 15:12:43
オリジナル
935 人が閲覧しました

Smarty テンプレートで PHP の組み込み関数を呼び出すことができることをまだ知らない人も多いと思います。その使い方を見てみましょう。

テンプレートの記述:
{'param1'|functionName:'param2':'param3'}

php関数プロトタイプ:
echo functionName('param1','param2','param3');
例:
{'1234567'|substr:'1':'2'}

以下は関数のパラメータの順序に関係しています

{'a'|str_replace:'A':'abcd'}

PHPで関数呼び出しを直接記述するために直接拡張されており、関数を登録する必要はありません修飾子 .

より深い調査: 配列が間違っている可能性があることが判明しました。

Smarty の区切り文字が「{」と「}」であると仮定して、配列配列を Smarty に代入します。

Smarty で配列の長さを必要とする場合、配列の後に |count を追加するメソッド呼び出しを使用できることを多くの資料で見てきました。つまり、{array|count} を通じて配列の長さを取得します。しかし、今日テンプレートを書いていたときに、配列の長さを取得できず、返されるのは文字列配列だけであることがわかりました。つまり、{array} の結果のみが返され、配列の長さは返されません。
smartyplugins フォルダーを確認すると、count に関連するメソッドが存在しないことがわかります。つまり、count は php のメソッドを直接呼び出しています。

その後、インターネット上の情報から、count の前に @ を追加すると、配列の長さを正しく取得できることがわかりました。さらにSmartyのソースコードを確認すると、Smartyは属性調整器以降のメソッド名を処理する際に、先頭に@が付いたメソッド名に対して特別な処理を行うことが分かりました。そこで、Smartyの属性調整部でphpで定義した関数を呼び出す場合は@を付けることで表現できると判断します。
1. 配列型のメソッドをテストしたところ、@記号を付けないとエラーになることが分かりました。たとえば、配列で count メソッドを呼び出して配列の長さを調べるには、次のように {array|@count} を呼び出します。また、配列で end メソッドを呼び出して、配列内の最後のデータ セットを取得します。配列の場合は、{array|@ end} を呼び出すことができます。
2. 文字列関連の関数をテストした結果、@ の有無にかかわらず通常どおり呼び出せることがわかりました。
3. その他は慎重にテストされていません。

Smarty の本来の目的はコードとテンプレートを分離することであり、本来の設計意図から逸脱しないため、smarty で複雑な PHP 関数を呼び出すことはお勧めできません。

テンプレートの記述:
{'param1'|functionName:'param2':'param3'}

php関数プロトタイプ:
echo functionName('param1','param2','param3');

インスタンス:
{ '1234567'|substr:'1':'2'}
以下の奇妙な点は、関数のパラメータの順序に関連しています
{'a'|str_replace:'A':'abcd'}

Smarty はカスタム関数
カスタム関数を呼び出すには、 register_function() を使用して登録する必要があります。 ここでは、一般的な文字列の切り取りの例を示します。
関数は次のとおりです


コードをコピーしますコードは次のとおりです:
function SmartyLen($params){
extract($params);
$len=strlen($ text);
$max= $length;
for ($i=0;$i<$length;$i++){
文字は中国語です
$length++; if($len>$max)$str. ...";
$str;
} を返す




関数を登録する

$smarty->register_function('len',"SmartyLen");


テンプレート呼び出し
{len text="under test" length="1"} //ここでの text と length は実際には関数内の 2 つのパラメーターであることに注意してください。関数のパラメーターは、関数の内部変数名と一致している必要があります。実際、関数で渡されるパラメータは配列です。配列内の変数を現在のシンボル テーブルにインポートするには、関数内で extract($params); を使用します。


http://www.bkjia.com/PHPjc/326639.html

www.bkjia.com
tru​​e

http://www.bkjia.com/PHPjc/326639.html

技術記事

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート