如何在函数中传递参数?

时间:2012-02-14 18:11:18

标签: php

我有这样的功能。

function load($name, $arg1, $arg2, $arg3, $arg4){
    $this->$name = new $name($arg1, $arg2, $arg3, $arg4);
}

load()方法将加载一些类并将其设置为类property,无限参数取决于它们分配的类。

另一个例子,如果我只用3参数设置方法$this->load,这将在过程中发生什么

function load($name, $arg1, $arg2){
    $this->$name = new $name($arg1, $arg2);
}

有可能做类似的事吗?

5 个答案:

答案 0 :(得分:6)

您可以使用func_get_args()ReflectionClass的组合以及this comment的帮助:

function load(){
    $args = func_get_args();
    if( !count( $args)){
        throw new Something();
    }

    $name = array_shift( $args);
    $class = new ReflectionClass($name);
    $this->$name = $class->newInstanceArgs($args);
}

答案 1 :(得分:3)

更简单的处理方法是为$arg变量使用数组。动态调用其他构造函数(new $name())然后需要接受一个数组作为它们的输入,你可以简单地传递参数数组:

// Params in an array
$params = array(1,2,3,4,5);

// Pass into the load() function
function load($name, $params) {
   // And pass them through to the dynamic constructor
   $this->$name = new $name($params);
}

答案 2 :(得分:2)

除非在参数上设置默认值,否则必须在调用函数时传入值:

function load($name, $arg1, $arg2, $arg3, $arg4){
load('x'); // fails, didn't specify args 1->4

但有默认值:

function load($name, $arg1, $arg2 = null, $arg3 = null, $arg4 = null){
load('x', 'y'); // works, args 2->4 are optional
load('x'); // fails, didn't specify arg1
load('x', 'y', 'z'); // works, args 3->4 are null.

还有其他选项 - 在数组中传入选项参数,或使用func_get_arg()

function load($name) {

load('x', 'y', 'z') // not an error, use func_get_args/func_num_args to get the extras

答案 3 :(得分:1)

func_get_args()可能就是你要找的东西。来自PHP文档:

<?php
function foo()
{
    $numargs = func_num_args();
    echo "Number of arguments: $numargs<br />\n";
    if ($numargs >= 2) {
        echo "Second argument is: " . func_get_arg(1) . "<br />\n";
    }
    $arg_list = func_get_args();
    for ($i = 0; $i < $numargs; $i++) {
        echo "Argument $i is: " . $arg_list[$i] . "<br />\n";
    }
}

foo(1, 2, 3);
?>

以上示例将输出:

Number of arguments: 3<br />
Second argument is: 2<br />
Argument 0 is: 1<br />
Argument 1 is: 2<br />
Argument 2 is: 3<br />

答案 4 :(得分:1)

有一种方法可以在PHP中使用真正可变大小的参数定义函数。您需要在函数中使用func_get_args函数:

function load() {
    $args = fnc_get_args();
    $name = $args[0];
    $arg1 = $args[1];
    ...

}

然后您需要确定接下来要拨打什么/如何拨打电话。