En général, si vous utilisez PHP, la performance ne devrait pas être votre plus gros souci, écrivez d'abord un code attrayant (c'est-à-dire lisible et maintenable, auto-documenté, etc.) puis optimisez votre profil. Si vous commencez par vous soucier de la vitesse, PHP n'est probablement pas la solution.
Mais pour répondre à votre question ... get_class a des performances assez décentes, je pense que c'est plutôt bien optimisé dans le moteur zend. essayer d'appeler une fonction non-existante et traitant de l'erreur est beaucoup plus cher. (C'est une erreur fatale d'appeler une fonction inexistante, vous ne pouvez l'attraper que si vous écrivez un tas de code de colle dans votre objet de base)
Voici un peu de benchmarking pour montrer certaines des différentes méthodes de déterminer la capacité à exécuter une méthode.
benchmark.php:
<?php
class MyClass {
public function Hello() {
return 'Hello, World!';
}
}
function test_get_class($instance) {
$t = get_class($instance);
}
function test_is_callable($instance) {
$t = is_callable($instance, 'Hello');
}
function test_method_exists($instance) {
$t = method_exists($instance, 'Hello');
}
function test_just_call($instance) {
$result = $instance->Hello();
}
function benchmark($iterations, $function, $args=null) {
$start = microtime(true);
for($i = 0; $i < $iterations; $i ++) {
call_user_func_Array($function, $args);
}
return microtime(true)-$start;
}
$instance = new MyClass();
printf("get_class: %s\n", number_format(benchmark(100000, 'test_get_class', array($instance)), 5));
printf("is_callable: %s\n", number_format(benchmark(100000, 'test_is_callable', array($instance)), 5));
printf("method_exists: %s\n", number_format(benchmark(100000, 'test_method_exists', array($instance)), 5));
printf("just_call: %s\n", number_format(benchmark(100000, 'test_just_call', array($instance)), 5));
?>
résultats:
get_class: 0.78946
is_callable: 0.87505
method_exists: 0.83352
just_call: 0.85176