|
|
|
|
<?php
function in () {
echo '<br>in in in!!!<br>';
$numargs = func_num_args();
echo "Number of arguments: $numargs\n";
$arg_list = func_get_args();
for ($i = 0; $i < $numargs; $i++) {
echo "Argument $i is: " . $arg_list[$i] . "<br />\n";
}
}
$list='2,2';
//in (2,2);
in ($list);
?>
|
собс если напрямую дать то пишет 2 аргумента, если через переменную то один и он равен 2,2 - как так? куда запятая девается? | |
|
|
|
|
|
|
|
для: Alph[p]a
(16.02.2011 в 10:35)
| | $list - это строка | |
|
|
|
|
|
|
|
для: Alph[p]a
(16.02.2011 в 10:35)
| | Так не пойдет, строку функция примет в качестве одного параметра, выдать её за два - не выйдет. | |
|
|
|
|
|
|
|
для: cheops
(16.02.2011 в 11:10)
| | логичный вопрос как тогда это сделать? | |
|
|
|
|
|
|
|
для: Alph[p]a
(16.02.2011 в 11:23)
| | Если хотите динамически формировать переменное количество аргументов, то придется действовать через eval(). А зачем потребовалось именно так, почему бы не воспользоваться аргументом-массивом? | |
|
|
|
|
|
|
|
для: Alph[p]a
(16.02.2011 в 10:35)
| |
$list = Array(2,2);
in($list);
|
| |
|
|
|
|
|
|
|
для: SHAman
(16.02.2011 в 11:23)
| | Number of arguments: 1 Argument 0 is: Array
придется разбирать массив уже в функции... вопрос остался как? | |
|
|
|
|
|
|
|
для: SHAman
(16.02.2011 в 11:23)
| | Аргумент все-равно один будет. | |
|
|
|
|
|
|
|
для: cheops
(16.02.2011 в 11:27)
| | вообщем придется разбирать массив уже внутри самой функции | |
|
|
|
|
|
|
|
для: Alph[p]a
(16.02.2011 в 11:31)
| | А в чем проблема-то? Почему принципиально передавать именно несколько параметров?
Кстати, прикольно. В Perl такой проблемы нет. Там если передавать массив, то придет не один аргумент "массив" а набор элементов этого массива. То есть запись
@list = (2,2);
in(@list);
|
равносильна
как вы хотите. | |
|
|
|
|
|
|
|
для: SHAman
(16.02.2011 в 11:40)
| | В php есть call_user_funс / call_user_method в качестве альтернативы. | |
|
|
|
|
|
|
|
для: Trianon
(16.02.2011 в 11:47)
| | Страшные конструкции, согласитесь. В Perl для подобных вещей есть символические ссылки.
sub myfunc {
dumper(\@_);
}
my $func = 'myfunc';
&$func('param','pam','pam');
|
Хотя я понимаю конечно, что это все особенности языков. В принципе, нет особой разницы между тем, чтобы передавать массив как ссылку на массив и как реальный массив в функцию.
Например, в Perl для передачи массива как одного аргумента, нужно передавать его как ссылку:
sub myfunc {
dumper($_[0]);
}
my @list = (1,2,3);
myfunc(\@list);
|
Это выведет дамп массива @list, а не 1 как было бы, если бы мы передавали @list вместо \@list. | |
|
|
|