Вызов частного или защищенного метода из включаемого файла. - PullRequest
1 голос
/ 18 июня 2011

myclass.php

class myclass {

private $name;

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

    otherFunction($this);

}

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

}

extension.php

function otherFunction($obj){

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

}

Хорошо, так что это проблема для некоторыхВы очевидно , что я вызываю закрытый метод из включаемого файла, который, очевидно, выдаст ошибку.Мой вопрос:

1.Есть ли способ, что включаемый файл может использовать внешние функции для вызова частных методов?

2.Как я мог использовать включенный файл для доступа к закрытым методам и, таким образом, распространяя свои функции на другой файл, не делая свой файл класса настолько раздутым со многими функциями?

3.Это вообще возможно?

Спасибо

1 Ответ

2 голосов
/ 18 июня 2011

Если вы работаете с 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, чтобы убедиться, что исключение обработано.

...