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

时间:2018-12-20 19:00:35

标签: php function arguments variable-variables

在定义函数时,我尝试使用变量列表作为参数。似乎应该是直截了当的,但不是。回调很容易,我可以使用(... $ 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.include我可以在函数中使用的变量列表,因此不必像在第一段代码中那样一次列出它们。

function funcname($listOfVar){

    echo $var1;
}

我要制作的完整代码:

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

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

function funcname($listOfVar){

    echo $var1;
}

**我意识到$ listOfVar语法中的逗号对此不正确,但是语法是什么呢?我已经尝试了变量变量($$)-尝试将字符串转换为变量名称引用。我试过数组。我已经尝试了这些方法的数百种变体,但我对此没有任何想法。请帮忙。

5 个答案:

答案 0 :(得分:1)

如果您事先不知道最终开发人员将在函数上使用多少个变量,则可以使用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 :(得分:0)

如果相反,您使用数组作为传递的数据...

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

尽管它具有优点,但不确定是否会是一个好主意,但是您也可以使用关联数组...

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

答案 2 :(得分:0)

将来,请阅读How to create a Minimal, Complete, and Verifiable example,以便我们了解您的问题,以为您提供帮助。

方法有自己的作用域,这意味着除非另行声明或通过,否则方法将无法访问变量。

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

实时demo

或者您可以使用list()方法

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

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

答案 3 :(得分: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']);

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

答案 4 :(得分:-1)

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

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

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