Задача лексического разбора исходного текста привела меня к необходимости следующего сравнения: PHP: <?php function is_white_space($char) { return in_array($char, array(' ', "\r", "\n", "\t")); } class white_space { function is_white_space($char) { return in_array($char, array(' ', "\r", "\n", "\t")); } } $char = "\n"; $time = microtime(true); for ($k=0; $k<100000; $k++) { is_white_space($char); } echo '<p>Function: '.(microtime(true)-$time).'</p>'; $wsc = new white_space; $time = microtime(true); for ($k=0; $k<100000; $k++) { $wsc->is_white_space($char); } echo '<p>Method: '.(microtime(true)-$time).'</p>'; $time = microtime(true); for ($k=0; $k<100000; $k++) { in_array($char, array(' ', "\r", "\n", "\t")); } echo '<p>In_array: '.(microtime(true)-$time).'</p>'; $time = microtime(true); for ($k=0; $k<100000; $k++) { if ($char == ' ' || $char == "\r" || $char == "\n" || $char == "\t"); } echo '<p>Simple: '.(microtime(true)-$time).'</p>'; $time = microtime(true); for ($k=0; $k<100000; $k++); echo '<p>Empty cycle: '.(microtime(true)-$time).'</p>'; ?> Результаты (довольно стабильны): Код (Text): Function: 0.75935792922974 Method: 1.2185189723969 In_array: 0.50226283073425 Simple: 0.14355111122131 Empty cycle: 0.035768985748291 Все это, конечно, относится к случаю большого количества вызовов функций/методов (количество итераций - 100 тысяч). Т.е. для пары десятков вызовов все это не будет иметь никакого значения.
PHP: <? class white_space { private $a = array(' ', "\r", "\n", "\t"); function is_white_space($char) { return in_array($char, $this->a); } } быстрее функции
PHP: <?php function is_white_space($char) { return in_array($char, array(' ', "\r", "\n", "\t")); } class white_space { function is_white_space($char) { return in_array($char, array(' ', "\r", "\n", "\t")); } } class white_space_by_Ti { private $a = array(' ', "\r", "\n", "\t"); function is_white_space($char) { return in_array($char, $this->a); } } $char = "\n"; $time = microtime(true); for ($k=0; $k<100000; $k++) { is_white_space($char); } echo '<p>Function: '.(microtime(true)-$time).'</p>'; $wsc = new white_space; $time = microtime(true); for ($k=0; $k<100000; $k++) { $wsc->is_white_space($char); } echo '<p>Method: '.(microtime(true)-$time).'</p>'; $time = microtime(true); for ($k=0; $k<100000; $k++) { in_array($char, array(' ', "\r", "\n", "\t")); } echo '<p>In_array: '.(microtime(true)-$time).'</p>'; $time = microtime(true); for ($k=0; $k<100000; $k++) { if ($char == ' ' || $char == "\r" || $char == "\n" || $char == "\t"); } echo '<p>Simple: '.(microtime(true)-$time).'</p>'; $time = microtime(true); for ($k=0; $k<100000; $k++); echo '<p>Empty cycle: '.(microtime(true)-$time).'</p>'; $ti = new white_space_by_Ti; $time = microtime(true); for ($k=0; $k<100000; $k++) { $ti->is_white_space($char); } echo '<p>Ti\'s method: '.(microtime(true)-$time).'</p>'; /* Спасибо, Ti! Натолкнул меня на мысль, хотя оно все-равно медленне самого простого способа, но уже лучше для настраиваемых списков */ $time = microtime(true); $white_spaces = array(' ', "\r", "\n", "\t"); for ($k=0; $k<100000; $k++) { in_array($char, $GLOBALS['white_spaces']); } echo '<p>Global array method: '.(microtime(true)-$time).'</p>'; ?> Код (Text): Function: 0.6974151134491 Method: 1.0876939296722 In_array: 0.50457882881165 Simple: 0.14894986152649 Empty cycle: 0.033971071243286 Ti's method: 0.62794184684753 Global array method: 0.27099394798279
PHP: <? function is_white_space_by_Ti($char) { static $a = array(' ', "\r", "\n", "\t"); return in_array($char, $a); }