Just a note: aggregate_methods doesn't aggregate those methods already defined in the class, including those methods inherited from a parent class.
Here's an example:
- If class B inherits from class A and aggregates methods from class C:
<?php
class A {
function foo() {
echo 'from class A';
}
}
class B extends A {
function B() {
aggregate_methods($this,'C');
}
}
class C {
function foo() {
echo 'from class C';
}
}
$myclass = new B();
$myclass->foo();
// This will print 'from class A'
?>
aggregate_methods
(PHP 4 >= 4.2.0)
aggregate_methods — クラスのメソッドを、動的にオブジェクトに集約する
説明
void aggregate_methods
( object $object
, string $class_name
)
クラスで定義されているすべてのメソッドを既存のオブジェクトに集約します。 ただし、クラスのコンストラクタは例外です。 また名前がアンダースコア文字 (_) で始まるメソッドも、 プライベートとみなされて例外となります。
パラメータ
- object
-
- class_name
-
返り値
値を返しません。
参考
- aggregate() - メソッドおよびプロパティの動的なクラス/オブジェクト集約を行う
- aggregate_info() - 指定したオブジェクトの集約情報を取得する
- aggregate_methods_by_list() - 選択したクラスメソッドを、動的にオブジェクトに集約する
- aggregate_methods_by_regexp() - 正規表現を使用して選択したクラスメソッドを、 動的にオブジェクトに集約する
- aggregate_properties() - クラスのプロパティを、動的にオブジェクトに集約する
- aggregate_properties_by_list() - 選択したクラスプロパティを、動的にオブジェクトに集約する
- aggregate_properties_by_regexp() - 正規表現を使用して選択したクラスプロパティを、 動的にオブジェクトに集約する
- deaggregate() - 集約されたメソッドやプロパティをオブジェクトから取り除く
aggregate_methods
Rodolfo
12-Sep-2005 07:27
12-Sep-2005 07:27
a at antialize dot dk
21-Mar-2005 08:12
21-Mar-2005 08:12
You can use this to dynamicily add methods to a class
class foo {
function addMethod( $code ) {
$cname = uniqid("class");
eval( "class ${cname} { ${code} }" );
aggregate_methods( $this , $cname );
}
function bar() {
$this->addMethod( "function baz() { echo 'sha'; }" );
}
}
$bang = new foo();
$bang->bar();
$bang->baz();
