Да, можно улавливать вызовы неопределенных методов классов с помощью магических методов:
Вы должны реализовать __call()
и/или __callStatic()
методов, here.
Предположим, у вас есть простой класс CCalculationHelper
всего несколькими способами:
class CCalculationHelper {
static public function add($op1, $op2) {
assert( is_numeric($op1));
assert( is_numeric($op2));
return ($op1 + $op2);
}
static public function diff($op1, $op2) {
assert( is_numeric($op1));
assert( is_numeric($op2));
return ($op1 - $op2);
}
}
На более позднем этапе времени, вам необходимо усилить этот класс путем умножения или деления. Вместо использования двух явных методов, вы можете использовать магический метод, который реализует обе операции:
class CCalculationHelper {
/** As of PHP 5.3.0 */
static public function __callStatic($calledStaticMethodName, $arguments) {
assert(2 == count($arguments ));
assert(is_numeric($arguments[ 0 ]));
assert(is_numeric($arguments[ 1 ]));
switch($calledStaticMethodName) {
case 'mult':
return $arguments[ 0 ] * $arguments[ 1 ];
break;
case 'div':
return $arguments[ 0 ]/$arguments[ 1 ];
break;
}
$msg = 'Sorry, static method "' . $calledStaticMethodName . '" not defined in class "' . __CLASS__ . '"';
throw new Exception($msg, -1);
}
... rest as before...
}
Вызова его следующим образом:
$result = CCalculationHelper::mult(12, 15);
Возможно, вам стоит взглянуть на это, что также охватывает фатальные ошибки: http://stackoverflow.com/a/2146171/1125956. Вы могли бы зарегистрировать ошибку в функции выключения, а пользователь, например, перенаправлен на страницу с ошибкой. –
@SteAp Это не о предотвращении, а о том, что он действительно что-то делает, когда возникает ошибка. Скажите отправить приветственное сообщение обратно вызывающему, чтобы сказать, что произошло. Может быть полезным в рамках. –
@SteAp Просто быстро проскользнул по ссылке. Он начинается с 'есть ли способ, которым я могу игнорировать функции ...'. Определенно не то, что я хочу. Будем принимать во внимание ответы. –