// не работаетВ чем различие между старыми версиями пхп до 5.3.0 и новым 5.3.0 и выше? Что именно изменилось чтобы этот пример работал в новых версиях?
foo( func_num_args() );
// работает
$args = func_num_args();
foo( $args );
Спустя 30 минут (23.02.2012 - 07:46) Rand написал(а):
Что нужно? Передать функцию как параметр? Может легче использовать её внутри функции, как и предполагается?
PHP 5.3.3 - всё работает:
PHP 5.3.3 - всё работает:
function foo($n) {
echo $n . <br />;
echo func_num_args();
}
function bar($a, $b) {
foo(func_num_args());
}
bar(1, 2);
Спустя 4 минуты, 27 секунд (23.02.2012 - 07:50) Guest написал(а):
Меня интересует почему в PHP 5.3.3 - всё работает
Не понимаю в чем различие
Не понимаю в чем различие
Спустя 7 минут, 5 секунд (23.02.2012 - 07:57) Rand написал(а):
Всё есть в документации: http://php.net/manual/ru/function.func-num-args.php
Цитата |
Так как для определения параметров данной функции необходим контекст выполнения, она не может быть передана в качестве параметра в версиях PHP до 5.3.0. Если функцию все же необходимо передать, то нужно присвоить ее переменной, которую уже можно использовать при передаче. |
Раньше нельзя было, сейчас можно.
Спустя 5 минут, 19 секунд (23.02.2012 - 08:03) Guest написал(а):
Не сразу въехал что это значит 
Тоесть другими словами интерпретатор просто не выполняет то что в ковычках?

Тоесть другими словами интерпретатор просто не выполняет то что в ковычках?
Спустя 21 минута, 59 секунд (23.02.2012 - 08:25) Rand написал(а):
Для того, чтобы точно знать, что делает интерпретатор, надо смотреть исходники PHP.
foo(func_num_args()) - это не передача функции, как параметра. Интерпретатор будет пытаться исполнить функцию func_num_args в текущем контексте, а уже результат её работы передать как параметр. По скольку в глобальной области видимости никаких параметров нет, то работать ничего не будет.
foo(func_num_args()) - это не передача функции, как параметра. Интерпретатор будет пытаться исполнить функцию func_num_args в текущем контексте, а уже результат её работы передать как параметр. По скольку в глобальной области видимости никаких параметров нет, то работать ничего не будет.