Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/247.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
定义php函数时使用变量列表作为参数_Php_Function_Arguments_Variable Variables - Fatal编程技术网

定义php函数时使用变量列表作为参数

定义php函数时使用变量列表作为参数,php,function,arguments,variable-variables,Php,Function,Arguments,Variable Variables,我试图在定义函数时使用变量列表作为参数。看起来应该是直截了当的,但不是。回调很简单,我可以使用(…$listOfVariables)将所有需要的参数都放到回调中,但在定义函数时它不起作用 $vararray[] = 'var1text'; $vararray[] = 'var2text'; $vararray[] = 'var3text'; funcname($vararray); function funcname($variable_array){ echo $variable_a

我试图在定义函数时使用变量列表作为参数。看起来应该是直截了当的,但不是。回调很简单,我可以使用(…$listOfVariables)将所有需要的参数都放到回调中,但在定义函数时它不起作用

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

function funcname($variable_array){
    echo $variable_array[1];  // will echo var2text
}
我需要这个,因为我有50个不同的函数,需要使用所有相同的参数。当参数列表发生变化时(确实如此),我需要一个中心位置来确保所有不同的函数都使用新的参数列表。(同样,我已经可以通过回调实现这一点,但在定义函数时却不行)

以下是我通常在一些争论中的做法

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


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

    echo $var1;
}
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.
}
这很好,但是我的变量列表变化很大,并且在许多其他函数中使用。我可能走错了方向,我愿意接受你的任何建议。下面是我需要完成的

已编辑

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语法中的逗号对此不正确,但是语法是什么呢?我尝试了变量($$)-尝试将字符串转换为变量名引用。我试过数组。我已经尝试了数百种不同的方法,我只是没有办法做到这一点。请帮忙

如果您使用数组作为传递的数据

function funcname($vars){
    echo $vars[0];
}
虽然它有一些优点,但不确定这是否是一个好主意,但您也可以使用关联数组

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

只需将变量放入数组中,并将数组的名称传递给函数即可

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

function funcname($variable_array){
    echo $variable_array[1];  // will echo var2text
}

如果您事先不知道end Developer将在函数上使用多少个变量,可以使用
func\u get\u 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']
我使用这个函数是因为您提到了这样一个事实,即您事先不知道end Developer将放置多少个参数

以后,请阅读,以便我们能够理解您的问题,从而帮助您

方法有自己的作用域,这意味着除非另外声明或传递,否则该方法将无法访问该变量

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()方法


也许你可以修改你的函数,让它接受一个数组而不是多个参数

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


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

    echo $var1;
}
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']);

也许这是更改变量列表的中心位置?

如果参数列表非常不稳定,为什么不传入一个数组呢?我很乐意。我没有成功地找到正确的方法。我所有的尝试都一无所获。你能告诉我你将如何使用我提供的代码吗?你能解释一下
$var1
$var2
等最初的来源吗?也许有不同的方法可以解决这个问题。如上所述,它们来自函数的外部。如果我使用我提交的第一段代码,它就可以正常工作。因此,这不是一个范围问题。我只想将变量压缩到一个位置,以便于更改。我需要一个变量来包含函数中使用的变量列表。请看我上面的编辑。因此,我遇到的问题是,现在必须更改对函数中变量的所有调用,以包括索引[]。那是一大堆工作。理想情况下,我希望使用最初命名的变量名,而不必包含索引。所以,数组可能不是答案。我确实知道有多少变量,只是我将从列表中进行加减,我需要一个位置来对列表进行中心更改…因此,一个包含所有变量的变量。我不确定您的问题,因为您没有提供足够的上下文。这能很好地说明你的问题吗?谢谢你…我已经在为回调做这件事了。痛苦就是定义。我不想一次又一次地改变定义中的参数。这就是我需要数组的地方。根据定义,你是指数组键吗?如果数组不是assoc数组,则不能使用splat运算符。也许会传入一个对象?我会更新我的答案我的意思是,当我定义(名称)函数并包含参数时,我需要它看起来像我上面的第二个示例代码。这正是我需要的。我不希望使用键、索引或任何其他必须在函数中编辑变量名的地方。只需一个包含$variables的$variable…。ie-$allVar=$var1、$var2、$var3。看起来很简单。没有那么多:(我不知道你的预期输出是什么在这种情况下,你想把一个变量列表传递到一个方法中,然后用它们做什么?你可以使用join()将变量连接到另一个方法上,即:函数名($arg)…名称(join(“”,[$arg1,$arg2…我已经在上面的代码中准确地说明了我需要什么。我不知道如何更好地解释它。我需要一个包含所有变量名称的变量,我将要传递到函数中。这是一个解决方案,但我试图避免改变在函数中调用变量的方式。使用我的第一个解决方案ion(上面的一个)我可以通过$va