Intereting Posts
Класс миниатюр PHP Возврат переменной из функции в php (возврат не работает) PHP – принимать значение из базы данных и устанавливать в качестве значения тега HTML select Как отключить URL-адреса cPanel Прочтите все txt-файлы в определенной папке и запишите все содержимое в один файл txt Ошибка WriteBlob с ошибкой с использованием ImageMagick 6.7.9 Как преобразовать текст с помощью HTML-адресов и недопустимых символов в эквивалент UTF-8? Вход без HTTPS, как защитить? Удаление акцентов без использования iconv Не удается получить доступ к моей папке из-за WordPress Объявление Zend_Test_PHPUnit_Constraint_DomQuery :: evaluation () должно быть совместимо с именем PHPUnit_Framework_Constraint :: evaluation () Что такое стандартная / лучшая практика для создания модульных тестов для функциональности с использованием баз данных? Получить значение reCaptcha через javascript? Изменение размера шрифта текстового изображения, преобразованного из текста в функцию изображения динамически PHP Installer Script

PHP: производительность func_get_args?

Я собираюсь использовать func_get_args для чтения дополнительных аргументов вызова функции.

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

Related of "PHP: производительность func_get_args?"

Если вы не используете его в массовых количествах, ни одна функция не будет иметь такой большой разницы. Вы всегда можете проверить, сколько времени потребуется для вызова, используя microtime() до и после вызова, но я не думаю, что вы найдете что-нибудь интересное.

Идите и используйте его, если хотите.

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

Должен ли я использовать массив для передачи дополнительных аргументов вместо того, чтобы читать их с помощью указанной выше функции?

Да, но больше по причине ясности и правильности кода, не столько производительности. Пример:

 function foo($a) { } foo(); // Warning: Missing argument 1 for foo() function foo() { list($a) = func_get_args(); } foo(); //no error 

Кроме того, когда вы видите foo($a) вы сразу же знаете, что нужно пройти.

Единственная причина использовать func_get_args – это когда вы хотите использовать функцию с произвольным числом аргументов (printf-like).

Насколько я знаю, есть только те две возможности. func_get_args от моего pov более чистый путь. Я использую этот фрагмент с синтаксическим анализатором (func_parameter), чтобы получить дополнительную гибкость. Существует лишь небольшое снижение производительности. Наверное, не примечательно.

Это похоже на вопрос о производительности между двойными кавычками и одиночной кавычкой. Если вы начнете думать об этом, вам следует задуматься о том, что PHP – правильное решение в случае производительности.

  $parameter = func_get_args(); $parameter = $this->func_parameter("key,data,dispense=",$parameter); extract($parameter); 

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

«Независимо от того, что плавает ваша лодка»

Я func_get_args этот код и использую функцию, которая использует func_get_args и func_num_args кажется дороже …

php -v:

 PHP 5.3.10-1ubuntu3.2 with Suhosin-Patch (cli) (built: Jun 13 2012 17:20:55) Copyright (c) 1997-2012 The PHP Group Zend Engine v2.3.0, Copyright (c) 1998-2012 Zend Technologies Output: php dynFuncArgListTest.php $StatTestTot: 14.194619178772 $DynTestTot: 33.246332645416 

код:

 <?php define('NEWLINE', "\n"); $StatTestTot = 0; $DynTestTot = 0; for($i = 0; $i < 9000; ++$i) { $randBoolArr = CreateArrayWithRandomBoolValues(900); $StatTestTot += StatTest($randBoolArr); $DynTestTot += DynTest($randBoolArr); $StatTestTot += StatTest($randBoolArr); $DynTestTot += DynTest($randBoolArr); $StatTestTot += StatTest($randBoolArr); $DynTestTot += DynTest($randBoolArr); $StatTestTot += StatTest($randBoolArr); $DynTestTot += DynTest($randBoolArr); } echo '$StatTestTot: ' . $StatTestTot . NEWLINE; echo '$DynTestTot: ' . $DynTestTot . NEWLINE; function DynTest($randBoolArr) { $StartDynTest = GetMicrotimeTrue(); foreach($randBoolArr as $aBool) { IsBoolAndTrueDyn($aBool); } $EndDynTest = GetMicrotimeTrue(); $Dyndisplacement = $EndDynTest - $StartDynTest; //echo 'Dyn Test: ' . $Dyndisplacement . NEWLINE; return $Dyndisplacement; } function StatTest($randBoolArr) { $StartStatTest = GetMicrotimeTrue(); foreach($randBoolArr as $aBool) { IsBoolAndTrue($aBool); } $EndStatTest = GetMicrotimeTrue(); $Statdisplacement = $EndStatTest - $StartStatTest; //echo 'Stat Test: ' . $Statdisplacement . NEWLINE; return $Statdisplacement; } function GetMicrotimeTrue() { return microtime(true); } function CreateArrayWithRandomBoolValues($size) { $output = array(); for($i = 0; $i < $size; ++$i) { $output[$i] = (rand(0, 1) === 0); } return $output; } function IsBoolAndTrue($input) { if(!is_bool($input) || $input !== true) { return false; } return true; } function IsBoolAndTrueDyn() { $num_args = func_num_args(); if($num_args > 0) { $args = func_get_args(); foreach($args as $arg) { if(!is_bool($arg) || $arg !== true) { return false; } } return true; } return false; } ?>