PHP マニュアル
前のページ |  | 次のページ

# LXXXII. オブジェクトプロパティとメソッドコールのオーバーロード

# 導入

この拡張モジュールの用途は、オブジェクトのプロパティへのアクセスと メソッドのコールのオーバーロードを可能にすることです。この拡張モ ジュールで定義されている関数は１つだけです。この関数、 overload() はこの機能を有効にするクラスの名前を 引数とします。名前を指定されたクラスでこの機能を使用したい場合は以 下の適当なメソッドを定義する必要があります。これらは、 __get(),__set(), __call()で、それぞれ、プロパティを取得、設定、 メソッドをコールするためのものです。オーバーロード機能は選択可能で す。これらのハンドラ関数の中でオーバーロードは無効とすることができ、 この場合、オブジェクトのプロパティに普通にアクセスできます。

警告
このモジュールは、 実験的なものです。これは、これらの関数の動作、関 数名は、このドキュメントに書かれて事項と同様に告知なく将来的なPHPのリ リースで変更される可能性があります。注意を喚起するとともに、このモジュー ルは使用者のリスクで使用して下さい。

# 要件

これらの関数は、標準モジュールの一部として利用可能であり、常に使用できます。

# インストール手順

以下の関数を使用するには、オプション --enable-overloadを指定してPHPをコ ンパイル必要があります。この拡張モジュールは、 PHP 4.3.0ではデフォルトで有効になっています。 --disable--overloadにより オーバーロードのサポートを無効とすることができます。

Windows版のPHPには この拡張モジュールのサポートが組み込まれています。これらの関数を使用 するために拡張モジュールを追加でロードする必要はありません。

> 注意: オーバーロードの組み込みサポートはPHP 4.3.0で利用可能となりました。

# 実行用の設定

この拡張モジュールは設定ディレクティブを全く定義しません。

# リソース型

この拡張モジュールはリソース型を全く定義しません。

# 定義済みの定数

この拡張モジュールは定数を全く定義しません。

# 例

overload()関数の簡単な使用例をいくつか示します。

例 1. PHPクラスのオーバーロード
`<?php class OO { var $a = 111; var $elem = array('b' => 9, 'c' => 42); // プロパティを取得するためのコールバックメソッド function __get($prop_name, &$prop_value) { if (isset($this->elem[$prop_name])) { $prop_value = $this->elem[$prop_name]; return true; } else { return false; } } // プロパティを設定するためのコールバックメソッド function __set($prop_name, $prop_value) { $this->elem[$prop_name] = $prop_value; return true; } } // OOオブジェクトをオーバーロードする overload('OO'); $o = new OO; print "\$o->a: $o->a\n"; // 出力: $o->a: print "\$o->b: $o->b\n"; // 出力: $o->b: 9 print "\$o->c: $o->c\n"; // 出力: $o->c: 42 print "\$o->d: $o->d\n"; // 出力: $o->d: // OOの$elem排列に新規アイテムを追加 $o->x = 56; // (PHP 4に組み込まれている)stdclassのインスタンスを生成 // $val はオーバーロードされていません! $val = new stdclass; $val->prop = 555; // $valオブジェクトを有する配列として"a"を設定 // しかし、__set() はこれを$elem配列に代入する $o->a = array($val); var_dump($o->a[0]->prop); ?>`

警告
この拡張モジュールは実験的なステータスにあり、全ての機能が動作す るわけではありません。現在、__call()はサポート されておらず、プロパティの取得または設定操作のオーバーロードだけ が可能です。クラスの元のオーバーロードハンドラを削除することはで きません。また、__set()はプロパティの一段階に アクセス場合にのみ動作します。

前のページ | ホーム | 次のページ
output_reset_rewrite_vars | 上に戻る | overload