1

myclass.php

class myclass {

private $name;

public function showData(){
    include_once "extension.php";

    otherFunction($this);

}

private function display(){
    echo "hello world!";
}

}

拡張子.php

function otherFunction($obj){

    if(isset($obj){
   $obj->display();
    }

}

さて、これが問題です。明らかにエラーをスローするインクルード ファイルからプライベート メソッドを呼び出していることが明らかな人もいます。私の質問は:

1. インクルード ファイルで外部関数を使用してプライベート メソッドを呼び出す方法はありますか?

2. インクルード ファイルを使用してプライベート メソッドにアクセスし、クラス ファイルを多くの関数で肥大化させずに関数を別のファイルに拡張するにはどうすればよいですか?

3. それは可能ですか?

ありがとう

4

1 に答える 1

2

PHP 5.3 を使用している場合、これは可能です。

リフレクションといいます。あなたのニーズに合わせて、ReflectionMethodが必要です

http://us3.php.net/manual/en/class.reflectionmethod.php

これが例です

<?php

//  example.php
include 'myclass.php';

$MyClass = new MyClass();

//  throws SPL exception if display doesn't exist
$display = new ReflectionMethod($MyClass, 'display');

//  lets us invoke private and protected methods
$display->setAccesible(true);

//  calls the method
$display->invoke();

}

明らかに、これを try/catch ブロックでラップして、例外が確実に処理されるようにする必要があります。

于 2011-06-18T16:56:05.177 に答える