2016-04-19 4 views
4

Мне нужно немного советов, я посетил this page в руководстве, однако это может быть неправильная страница или я неверно истолковал инструкции, поскольку я все еще запутался.Создать список переменных параметров

enter image description here

У меня следующий вопрос о назначении выше. Я хотел бы знать:

  1. В первую очередь, что такое параметр переменной длины?
  2. Однако создание функции не является проблемой, как установить количество аргументов, поскольку в соответствии с вопросом (если я правильно понимаю) функция должна иметь возможность принимать любое количество аргументов. Думаю, он снова возвращается к моему 1-му вопросу о параммерах переменной длины ...?

Спасибо за чтение

+0

Термин "список параметров переменной длины". Здесь очень важен «список». Он описывает функцию, которая может быть вызвана (использована) с переменным числом или параметрами. Вы не «устанавливаете» число параметров так или иначе. Вы просто вызываете функцию с любым списком параметров, которые вы хотите, и оставляете ее функции для ее сортировки. php предлагает средство для запроса списка параметров, с которыми вызывалась функция. Хорошим примером такой функции является php 'sprintf (...)'. – arkascha

+0

@arkascha спасибо, я прав, если я говорю, когда создаю функцию, у нее не будет параметров, то есть 'function nrs()' –

+0

Конечно, вы, безусловно, можете это сделать. Хотя часто вы хотите, чтобы исходный параметр (ы) определялся явным образом. Это имеет два преимущества: 1. вы можете использовать намеки типа для тех первых параметров, которые являются хорошими для специальных, контролирующих параметров и 2. вы позволяете современным IDEs помогать более конструктивно. – arkascha

ответ

1

Для использования переменных параметров длины на PHP вам нужна функция func_get_args() вместо того, чтобы определить параметры на объявлении функции. Ваша функция выглядеть следующим образом:

function foo() 
{ 
    $params_count = func_num_args(); 
    $params_values = func_get_args(); 
} 

На $params_values есть все параметры, которые были даны функции foo(). В поле params_count указывается количество параметров, заданных foo(). Вы можете получить количество параметров, переданных функции Foo с func_num_args()

Пример использования этой функции (https://3v4l.org/TWd3v):

function foo() { 
    $params_count = func_num_args(); 
    var_dump($params_count); 
    $params_values = func_get_args(); 
    var_dump($params_values); 
} 
+0

Благодарим вас за помощь –

+0

aaaah Получаю. –

1

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

См http://php.net/manual/en/function.func-get-args.php

3

PHP имеет поддержку переменной длины списки аргументов, определяемых пользователем функций. Это реализовано с использованием ... токена в PHP 5.6 и позже и с использованием func_num_args(), func_get_arg() и func_get_args() в PHP 5.5 и более ранних версиях.

http://php.net/manual/en/functions.arguments.php#functions.variable-arg-list

Вот для 5.6+

<?php 

function my_func(...$parameters) 
{ 
    echo "There were ".count($parameters)." parameters passed:\n"; 

    foreach ($parameters as $a_parameter) 
    { 
     echo "Number ".$a_parameter."\n"; 
    } 
} 

echo my_func(1, 2, 3, 4, 5); 

?> 

https://3v4l.org/QuJqD

В (даже больше) простыми словами:

Волшебство происходит с ... лексемы. my_func ожидает переменная количество параметров, которое будет храниться в массиве $parameters. Все это из-за ..., предшествующего $parameters.Затем, используя count на этом массиве $parameter, мы получаем номер параметров, хранящихся в этом массиве.

Как Стивен в комментариях красиво выразился: my_func(...$parameters) имеет список параметров переменной длины, в отличие от списка параметров фиксированной длины, которая будет выглядеть function my_func($param1, $param2, $param3, $param4, $param5), который бы всегда ожидать параметров.

+1

в отличие от списка параметров фиксированной длины, который будет выглядеть как функция my_func ($ param1, $ param2, $ param3, $ param4, $ param5) –

+0

@StevenManuel красиво положил Steven и добавлю его в ответ – Sharky

+0

Я изменил статическую информацию, длина до фиксированной длины, которая, я думаю, лучше –

0

Я думаю, что вопрос относится к тройной точечной нотации: Из инструкции:

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

Аргументы переменной доступны в виде массива (так что вы можете их закодировать).

Copy паста из руководства:

<?php 
function sum(...$numbers) { 
$acc = 0; 
foreach ($numbers as $n) { 
    $acc += $n; 
} 
return $acc; 
} 

echo sum(1, 2, 3, 4); 
1
<?php 
    function my_func(){ 
     $args = func_num_args(); 
     $args_list = func_get_args(); 
     echo 'There were '.$args.' numbers passed:<br>'; 
     foreach($args_list as $k=>$v){ 
      echo 'Number '.$v.'.<br>'; 
     } 
    } 

    my_func(1,2,3,4,5); 
    my_func(3,4,5); 
?> 

Выход 1:

There were 5 numbers passed: 
Number 1. 
Number 2. 
Number 3. 
Number 4. 
Number 5. 

Выход 2:

There were 3 numbers passed: 
Number 3. 
Number 4. 
Number 5. 
1

PHP поддерживает функцию переменной длины, Симметричного для достижения что вам нужно создать функцию wit ч нет Титулы и вы можете получить получить, что Params с помощью функции PHP func_get_args()

function noprms(){ 
    $count = func_num_args(); 
    $args = func_get_args(); 
    echo "There were $count arguments passed \n"; 
    echo "Number ".implode(",\nNumber ",$args)."\n"; 
} 

noprms(1,2,3,4,5)."\n"; 
noprms(1,2,3,4,5,6,7,8,9)."\n"; 

Docs Demo

Смежные вопросы