Php 如何在函数中传递参数?

Php 如何在函数中传递参数?,php,Php,我有这样的功能 function load($name, $arg1, $arg2, $arg3, $arg4){ $this->$name = new $name($arg1, $arg2, $arg3, $arg4); } load()方法将加载某个类并将其设置为class属性,无限参数取决于它们指定的类 另一个例子是,如果我只使用3个参数设置方法$this->load,那么这个过程会发生什么 function load($name, $arg1, $arg2){ $

我有这样的功能

function load($name, $arg1, $arg2, $arg3, $arg4){
    $this->$name = new $name($arg1, $arg2, $arg3, $arg4);
}
load()
方法将加载某个类并将其设置为class
属性
,无限参数取决于它们指定的类

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

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

可以这样做吗?

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

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.
还有其他选项-在数组中传入选项参数,或使用


一种更简单的处理方法是为
$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);
}

您可以使用的组合,以及以下帮助:

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);
}
可能就是你要找的。从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 />
参数数量:3
第二个论点是:2
参数0是:1
论点1是:2
论点2是:3

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

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

}

然后您需要确定下一步调用什么/如何调用。

否。无法使用数组。由于类
$name()
可能需要两个或多个参数才能实现
\uu construct()
我想要实现的目标,因此它可以执行无限参数。这是最后一个选项。在函数定义中指定必需的参数,然后使用func_get_args()对所有“无限”额外参数执行操作。
function load() {
    $args = fnc_get_args();
    $name = $args[0];
    $arg1 = $args[1];
    ...

}