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];
...
}