Использовать список переменных в качестве аргументов при определении функции php

Я пытаюсь использовать список переменных в качестве аргументов при определении функции. Кажется, это должно быть прямо вперед, но нет. Обратный вызов прост, и я могу использовать (… $ listOfVariables), чтобы получить все необходимые аргументы в обратный вызов, но он не работает при определении функции.

Мне это нужно, потому что у меня есть 50 различных функций, которые требуют использования всех одинаковых аргументов. Когда список аргументов изменяется (что и происходит), мне нужно центральное расположение, чтобы все новые функции использовали новый список аргументов. (Опять же, я уже могу сделать это с обратным вызовом, но не когда я определяю функцию)

Вот как я обычно делаю это для нескольких аргументов.

$var1 = 'var1text';
$var2 = 'var2text';
$var3 = 'var3text';


function funcname($var1, $var2, $var3){

echo $var1;
}

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

РЕДАКТИРОВАНИЕ

1. переменные, которые определены вне функции

$var1 = 'var1text';
$var2 = 'var2text';
$var3 = 'var3text';

2. переменная, которая содержит все эти переменные

$listOfVar = $var1, $var2, $var3; //***see note below***.

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

function funcname($listOfVar){

echo $var1;
}

полный код, который я пытаюсь сделать работу:

$var1 = 'var1text';
$var2 = 'var2text';
$var3 = 'var3text';

$listOfVar = $var1, $var2, $var3;

function funcname($listOfVar){

echo $var1;
}

** Я понимаю, что запятые в синтаксисе $ listOfVar не верны для этого, но что тогда является синтаксисом? Я пробовал переменные переменные ($$) — пытался преобразовать строку в ссылки на имена переменных. Я пробовал массивы. Я пробовал буквально сотни их вариантов, и у меня просто нет идей для этого. Пожалуйста помоги.

-2

Решение

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

Вот пример использования:

function foo() {
$arguments = func_get_args();

return $arguments;
}

print_r(foo(1, 2, 3)); // [1, 2, 3]
print_r(foo('a', 'b', 'c')); // ['a', 'b', 'c']

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

1

Другие решения

Если вместо этого вы используете массив для передаваемых данных …

function funcname($vars){
echo $vars[0];
}

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

function funcname($vars){
echo $vars['var1'];
}
0

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

function funcname(array $args){
foreach ($args as $arg_name => $arg) {
// do stuff with $arg_name and $arg
}
// or refer to a specific argument, like where you would have said $var1, instead...
$args['var1'];
// or extract the array within your function to get the keys as variables
extract($args);
echo $var1;
// If you do this, be sure to heed the warnings about extract.
// Particularly the bit about not extracting $_GET, $_POST, etc.
}

Затем вместо определения отдельных переменных, таких как

$var1 = 'var1text';
$var2 = 'var2text';
$var3 = 'var3text';

Создать ассоциативный массив

$text['var1'] = 'var1text';
$text['var2'] = 'var2text';
$text['var3'] = 'var3text';

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

class SomeFunctions
{

private $listOfVar = [];

public function __construct(array $listOfVar) {
$this->listOfVar = $listOfVar;
}

public function funcnameA() {
foreach ($this->listOfVar as $name => $value) // ...
}

public function funcnameB() {
$this->listOfVar['var1'];
}
}

$example = new SomeFunctions(['var1' => 'something', 'var2' => 'something']);
$example->funcnameA();
$example->funcnameB();

Если вам нужно использовать эти функции в качестве обратных вызовов, вы можете передать их следующим образом в качестве параметра обратного вызова:

functionThatTakesaCallback([$example, 'funcnameB']);

Может быть, это может быть центральное место для изменения списка переменных?

0

В будущем читайте Как создать минимальный, полный и проверяемый пример так что мы можем Понимаю Ваш вопрос, чтобы помочь вам.

Методы имеют свою собственную область, то есть, если иное не объявлено или не передано, метод не будет иметь доступа к переменной.

class Retriever {
private static $instance;
protected $listOfVars = array();

public static function getInstance() {
if(self::$instance) return self::$instance;
self::$instance = new self();
return self::$instance;
}

private function __construct() {}

public function addVar($var) { array_push($this->listOfVars, $var); return $this; }
public function getVars() { return $this->listOfVars; }
public function reset() { $this->listOfVars = array(); return $this; }
}

function name($var1, $var2, $var3) {
echo $var1;
}
function anotherName($var1, $var2) {
echo $var2;
}

Retriever::getInstance()->addVar("var1text")->addVar("var2text")->addVar("var3text");
name(...Retriever::getInstance()->getVars()); # Output: var1test

Retriever::getInstance()->reset()->addVar("var1text")->addVar("var2text");
anotherName(...Retriever::getInstance()->getVars()); # Output: var2text

Жить демонстрация.

Или вы можете использовать метод list ()

function name($listOfVars) {
list($var1, $var2) = $listOfVars;
echo $var1;
}

name(array(‘var1text’, ‘var2text’));
0

Просто поместите ваши переменные в массив и передайте имя массива в вашу функцию.

$vararray[] = 'var1text';
$vararray[] = 'var2text';
$vararray[] = 'var3text';
funcname($vararray);

function funcname($variable_array){
echo $variable_array[1];  // will echo var2text
}
-1
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector