オブジェクトを操作するための関数はクラスでも機能します(PHP 5.2)

クラスを操作するためのいくつかの関数の仕様が十分に正確ではないことが判明しました



ru2.php.net/manual/ru/function.is-subclass-of.php

is_subclass_of-オブジェクトの親の1つとしてこのクラスがある場合、TRUEを返します

bool is_subclass_of (オブジェクトオブジェクト、文字列class_name);

この関数は、クラス名でもうまく機能します。



たとえば、これはすべての子クラスを表示する方法です。

関数getClassChildren($ parentClassName){
	 $ result = array();
	 foreach(get_declared_classes()as $ className){
		 if(is_subclass_of(strtolower($ className)、$ parentClassName)または$ className == $ parentClassName)
			 $ result [] = $ className;
	 }
	 return $ result;
 }


そうすることはお勧めしませんが、このハックの例をご覧になりたいという人もいると聞きましたが、それなしで行う方法を見つけてほしいと思います;-)



get_parent_class-オブジェクトまたはクラスの基本クラスの名前を返します

文字列get_parent_class (混合$ obj)



議論は混合型であると正直に言われていますが、多く(私の友人による判断)はこれに注意を払っていません。 この関数はクラス名でも素晴らしい働きをします。



method_exists ()関数の作業に驚きました。

 <?
クラスA {
	 private $ a1 = "test";
	 public $ a2 = "tt";
	静的パブリック関数aa(){}
 }
クラスBはAを拡張します{
	静的パブリック関数bb(){}
 }
 $ a =新しいA;
 var_dump(method_exists( "A"、 'aa'));
 $ b =新規B;
 var_dump(method_exists( "B"、 'aa'));
 ?>




答え

bool(true)

bool(true)



つまり、クラス用ではなく、作成中のオブジェクト用のメソッドがあるかどうかを実際に確認します。

もちろん、この関数はインターフェイスのイデオロギーと矛盾しますが、使用するのが非常に便利な場合があります。



call_user_methodは、倒錯を許容しません。

 <?
クラスA {
	 static public function aa(){
		 echo 'aaa';
	 }
 }
 call_user_method( 'aa'、 'A');
 ?>
答えは致命的エラーになります :変数のみを参照渡しできます

トピックをリマインダー、おそらく議論としてください



All Articles