Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: аргументы и переменная
 
 автор: Alph[p]a   (16.02.2011 в 10:35)   письмо автору
 
 

<?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 - как так? куда запятая девается?

  Ответить  
 
 автор: Красная_шляпа   (16.02.2011 в 10:56)   письмо автору
 
   для: Alph[p]a   (16.02.2011 в 10:35)
 

$list - это строка

  Ответить  
 
 автор: cheops   (16.02.2011 в 11:10)   письмо автору
 
   для: Alph[p]a   (16.02.2011 в 10:35)
 

Так не пойдет, строку функция примет в качестве одного параметра, выдать её за два - не выйдет.

  Ответить  
 
 автор: Alph[p]a   (16.02.2011 в 11:23)   письмо автору
 
   для: cheops   (16.02.2011 в 11:10)
 

логичный вопрос как тогда это сделать?

  Ответить  
 
 автор: cheops   (16.02.2011 в 11:27)   письмо автору
 
   для: Alph[p]a   (16.02.2011 в 11:23)
 

Если хотите динамически формировать переменное количество аргументов, то придется действовать через eval(). А зачем потребовалось именно так, почему бы не воспользоваться аргументом-массивом?

  Ответить  
 
 автор: SHAman   (16.02.2011 в 11:23)   письмо автору
 
   для: Alph[p]a   (16.02.2011 в 10:35)
 

$list = Array(2,2);
in($list);

  Ответить  
 
 автор: Alph[p]a   (16.02.2011 в 11:25)   письмо автору
 
   для: SHAman   (16.02.2011 в 11:23)
 

Number of arguments: 1 Argument 0 is: Array

придется разбирать массив уже в функции... вопрос остался как?

  Ответить  
 
 автор: cheops   (16.02.2011 в 11:27)   письмо автору
 
   для: SHAman   (16.02.2011 в 11:23)
 

Аргумент все-равно один будет.

  Ответить  
 
 автор: Alph[p]a   (16.02.2011 в 11:31)   письмо автору
 
   для: cheops   (16.02.2011 в 11:27)
 

вообщем придется разбирать массив уже внутри самой функции

  Ответить  
 
 автор: SHAman   (16.02.2011 в 11:40)   письмо автору
 
   для: Alph[p]a   (16.02.2011 в 11:31)
 

А в чем проблема-то? Почему принципиально передавать именно несколько параметров?

Кстати, прикольно. В Perl такой проблемы нет. Там если передавать массив, то придет не один аргумент "массив" а набор элементов этого массива. То есть запись

@list = (2,2);
in(@list);


равносильна

in(2,2)


как вы хотите.

  Ответить  
 
 автор: Trianon   (16.02.2011 в 11:47)   письмо автору
 
   для: SHAman   (16.02.2011 в 11:40)
 

В php есть call_user_funс / call_user_method в качестве альтернативы.

  Ответить  
 
 автор: SHAman   (16.02.2011 в 12:04)   письмо автору
 
   для: 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.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования