Я хочу получить доступ к закрытым методам и переменным извне классов в очень редких конкретных случаях.
Я видел, что это невозможно, хотя используется самоанализ.
Конкретный случай следующий:
Я бы хотел что-то вроде этого:
class Console
{
final public static function run() {
while (TRUE != FALSE) {
echo "\n> ";
$command = trim(fgets(STDIN));
switch ($command) {
case 'exit':
case 'q':
case 'quit':
echo "OK+\n";
return;
default:
ob_start();
eval($command);
$out = ob_get_contents();
ob_end_clean();
print("Command: $command");
print("Output:\n$out");
break;
}
}
}
}
Этот метод должен быть вживлен в код, подобный следующему:
Class Demo
{
private $a;
final public function myMethod()
{
// some code
Console::run();
// some other code
}
final public function myPublicMethod()
{
return "I can run through eval()";
}
private function myPrivateMethod()
{
return "I cannot run through eval()";
}
}
(это только одно упрощение. Реальное проходит через сокет и реализует множество других вещей ...)
Итак ...
Если вы создадите экземпляр класса Demo и вызовете $ demo-> myMethod (), вы получите консоль: эта консоль может получить доступ к первому методу, написав команду, подобную:
> $this->myPublicMethod();
Но вы не можете успешно запустить второй:
> $this->myPrivateMethod();
Есть ли у кого-нибудь из вас идеи или есть какая-нибудь библиотека для PHP, которая позволяет вам это делать?
Большое спасибо!