Я просто добавляю это, поскольку я не программировал на PHP в течение двух лет. Не могли бы вы просто добавить в класс функцию, которая вызывает защищенный метод следующим образом?
$obj->publicFunc = create_function('$arg', 'return $this->protectedFunc($arg);');
Редактировать :
Я думаю, что Том прав, глядя на документацию для create_function. Похоже, область действия $ будет «неправильной», когда вы попытаетесь вызвать ее в этом примере.
Похоже, что традиционные анонимные функции поддерживаются также начиная с PHP 5.3.0 (и мое первое решение, вероятно, не будет работать), поэтому я, вероятно, вместо этого напишу так:
$obj->publicFunc = function($arg) {
return $this->protectedFunc($arg);
};
Так как я думаю, что это выглядит немного чище (и ваша IDE выберет это, конечно, лучше).
Тьфу, я пытался использовать Reflection для вызова метода, но PHP тоже не позволит вам сделать это. Похоже, вам придется использовать какой-то детский класс, как предлагали другие авторы. Если вы найдете метод, который работает, разработчики, скорее всего, в будущем классифицируют его как ошибку и сломают ваш код при обновлении до следующей версии.
Я рекомендую расширить класс.