2013-06-27 8 views
0

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

У меня есть несколько ограничений:

  • Он должен работать на PHP4.
  • Он должен работать прямо из коробки БЕЗ установки чего-то еще. (Нет adp или что-то еще).
+0

Возможный дубликат http://stackoverflow.com/questions/3620659/is-it-possible-to-overwrite-a-function-in-php –

ответ

0

для перезаписи функции вы можете проверить, если функция завершается с помощью function_exists, но вы можете переопределить функцию

if (!function_exists('function_name')) { 
    // ... proceed to declare your function 
} 
2

Технически это возможно с помощью override_function() или rename_function() функции.

Это не очень чистый способ справиться с этим, но вместо этого я рекомендую вам обновить свой класс, чтобы вы могли перенаправить вызов в другое место.

Например, вы можете изменить это:

class MyClass { 
    public function doSomething() { 
     ... 
     do_complex_calc(); 
     ... 
    } 
} 

Чтобы что-то вроде этого:

class MyClass { 
    public $calc_helper = 'do_complex_calc'; 
    public function doSomething() { 
     ... 
     $helper = $this->calc_helper; 
     $helper(); 
     ... 
    } 
} 

$x = new MyClass(); 
$x->calc_helper = 'another_func_for_testing'; 
$x->doSomething(); 

Это могут быть очищены еще больше, но это показывает общую идею. Например, я бы не рекомендовал оставлять переменную $calc_helper общедоступной - я бы использовал какой-то метод, позволяющий вам вместо этого изменить его.

+0

Да, точно, у меня такая же идея. Это может даже работать для моей задачи. Спасибо – Alex

+0

@Alex Я только что обновил свой ответ, чтобы отразить тот факт, что это ** возможно **, хотя я бы по-прежнему рекомендовал то, как я изначально описывал. – jcsanyi