2012-01-31 6 views
1

私は簡単なPHPフレームワークを書いています。メソッドやプロパティがプライベートかパブリックかどうかを確認するには、より良い方法が必要です。現在、Reflectionクラスを使用していますが、ほぼすべてのプロパティアクセスで必要です。Reflectionなしでメソッドまたはプロパティの可視性をチェックする方法は?

魔法のためには__getが必要です。getTestProperty()がある場合は、$object->testPropertyに電話することができます。

これは(パフォーマンスのために)これを行う別の方法をお探しです。より速い可能性はありますか?

+2

することができます - ブールmethod_exists(class_name_or_object、METHOD_NAMEは) - メソッド(公開、さらには保護されており、プライベート)のどちらか偽 配列get_class_methods(class_name_or_objectを)存在する場合はtrueを返しますそれがなぜ必要なのか説明してください。あなたのオブジェクトは、他のオブジェクトの可視性を照会する必要はありません。オブジェクトにパブリックAPIが保証されていることを確認するには、インターフェイスを使用します。 – Gordon

+0

私は、この情報を明示的に決定したいと思ったら、私がリファクタリングして、どのように問題に近づいているのかを変える必要があることを知りました。 OOPはインタフェースに関するものです。あなたは何かにアクセスするか、アクセスしないかのどちらかです。カーテンの後ろにあるメソッド/プロパティの詳細を気にする必要はありません。 – rdlowrey

+0

私はそのオブジェクトにpublicメソッド 'getTestProperty()'があれば '$ object-> testProperty'を得ることができるマジック__getのために必要です。//質問を編集しました –

答えて

1

あなたは、メソッドがオブジェクトで呼び出すことができるかどうかをチェックするためにis_callableを使用することができます。

is_callable(array($object, 'methodName')) 

あなたには、いくつかのプロパティの存在を使用property_existsをチェックする必要がある場合:

property_exists($someObject', 'userId') 

そしてfinalyがありますmethod_exists

method_exists('someClass', 'someMethod'); 
+6

'is_callable'は実際には存在しないにもかかわらず呼び出し可能な魔法のメソッドに対しても' TRUE'を返すことに注意してください。 'property_exists'はプライベートプロパティに対して' TRUE'を返すので、アクセス可能性については何も教えてくれません。プロパティ。 – rdlowrey

0

また、 eful機能:リターン・クラスのパブリックメソッドの配列やオブジェクト

関連する問題