Files
smarty/docs/ja/programmers/advanced-features/advanced-features-objects.xml

140 lines
5.6 KiB
XML
Raw Normal View History

2007-04-21 12:13:34 +00:00
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 2596 Maintainer: takagi Status: ready -->
2007-04-21 12:13:34 +00:00
<!-- CREDITS: mat-sh,daichi,joe -->
<sect1 id="advanced.features.objects">
<title>オブジェクト</title>
<para>
Smarty は、テンプレートから PHP の
<ulink url="&url.php-manual;object">オブジェクト</ulink>
へのアクセスを許可しています。オブジェクトにアクセスするには2つの方法があります。
</para>
<itemizedlist spacing="compact">
<listitem><para>
1つはテンプレートに <link linkend="api.register.object">オブジェクトを登録</link>
し、<link linkend="language.custom.functions">カスタム関数</link>
と似た構文を用いてアクセスする方法です。
</para></listitem>
<listitem><para>
もう1つの方法は <link linkend="api.assign"><varname>assign()</varname></link>
を用いてテンプレートにオブジェクトを割り当て、
他の割り当てられた変数のようにオブジェクトにアクセスする方法です。
</para></listitem>
</itemizedlist>
<para>
1つめのメソッドは素晴らしいテンプレート構文を持っています。
それはとてもセキュアで、 登録されたオブジェクトはいくつかのメソッドやプロパティを制限する事が出来ます。
しかし<emphasis role="bold">繰り返しの処理やオブジェクトの配列への割り当て等の事が出来ません</emphasis>
あなたのニーズによって選択するメソッドは決まりますが、
テンプレート構文を最小限守るには必ず1つめのメソッドを使用して下さい。
</para>
<para>
<link linkend="variable.security"><parameter>$security</parameter></link>
が有効の時、('_' から始まる) プライベートメソッドや関数にはアクセス出来ません。
もしメソッドとプロパティで同じ名前が存在する場合、メソッドが優先されます。
</para>
<para>
第3パラメータにメソッドやパラメータをリストした配列を与える事でアクセスを制限できます。
</para>
<para>
デフォルトではテンプレートからオブジェクトに渡されたパラメータは
<link linkend="language.custom.functions">カスタム関数</link>
によって同じ方法で渡されます。 連想配列は第1パラメータとして渡され、
smarty オブジェクトは第2パラメータとして渡されます。
もし古いオブジェクトパラメータの渡し方のように各引数を一度に渡したいなら、第4パラメータに
&false; を指定します。
</para>
<para>
任意の第5パラメータは
<parameter>format</parameter>&true; の時だけ影響し、
ブロックとして扱われるべきオブジェクトのメソッドのリストを格納します。
これはこれらのメソッドがテンプレート内に終了タグ
(<literal>{foobar->meth2}...{/foobar->meth2}</literal>)
を持つことを意味し、メソッドへのパラメータは
<link linkend="plugins.block.functions">
<varname>block-function-plugins</varname></link>
へのパラメータと同じ構文となります。つまり、4つのパラメータ
<parameter>$params</parameter>
<parameter>$content</parameter>
<parameter>&amp;$smarty</parameter> および
<parameter>&amp;$repeat</parameter> を持ち、ブロック関数プラグインのように振る舞います。
</para>
<example>
<title>登録または割り当てられたオブジェクトを使用する</title>
<programlisting role="php">
<![CDATA[
<?php
// オブジェクト
class My_Object {
function meth1($params, &$smarty_obj) {
return 'this is my meth1';
}
}
$myobj = new My_Object;
// オブジェクトを (参照で) 登録します
$smarty->register_object('foobar',$myobj);
// いくらかのメソッド又はプロパティを制限したい場合、それらを配列の値としてリストします
$smarty->register_object('foobar',$myobj,array('meth1','meth2','prop1'));
// 古いオブジェクトパラメータの形式を使いたい場合、booleanのfalseを渡します。
$smarty->register_object('foobar',$myobj,null,false);
// オブジェクトを割り当てる事が可能です(できれば参照渡しで)
$smarty->assign_by_ref('myobj', $myobj);
$smarty->display('index.tpl');
?>
]]>
</programlisting>
<para>
そして <filename>index.tpl</filename>
でオブジェクトにアクセスするには以下のようにします。
</para>
<programlisting>
<![CDATA[
{* 登録されたオブジェクトにアクセスします *}
{foobar->meth1 p1='foo' p2=$bar}
{* outputに割り当てる事が可能 *}
{foobar->meth1 p1='foo' p2=$bar assign='output'}
the output was {$output}
{* 割り当てたオブジェクトにアクセスします *}
{$myobj->meth1('foo',$bar)}
]]>
</programlisting>
</example>
<para>
<link linkend="api.register.object"><varname>register_object()</varname></link>
および
<link linkend="api.assign"><varname>assign()</varname></link>
も参照してください。
</para>
</sect1>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"../../../../manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->