PHP - 将单独的数组项作为方法参数

3

有没有可能将数组的单个项目作为参数轻松地传递给方法?

像这样:

编辑2:

我更改了我的代码以显示“一种解决方案”,但此解决方案的问题是它自PHP 4.1以来已被弃用并在PHP 7中删除。

<?php
    $builder = new Builder;
    $params = array('This is number: ', 4);

    echo call_user_method_array('add', $builder, $params);

    class Builder {
        public function add($string1, $number1) {
            return $string1 . $number1;
        }
    }
?>

编辑:

我举的例子太简单了,犯了个错误。我想知道是否有可能创建一个类似MVC的框架,而不是像那样返回一个字符串。解决方案必须全面考虑。


传递数组并使用implode函数,或将数组元素保存在某个变量中,然后将其传递给函数。 - Chetan Ameta
2
尝试这样写:public function add($params) { return implode('', $params); } - Thamilhan
3个回答

2

如果你想坚持使用通用解决方案,只需使用正确的未过时方法:

echo call_user_func_array([$builder, 'add'], $params);

参考资料:callable

示例:https://3v4l.org/4VFi6


2
使用implode()方法。
<?php
    $builder = new Builder;
    $params = array('This is number: ', 4);

    echo $builder->add($params); //returns 'This is number: 4'

    class Builder {
        public function add($params) {
            return implode('', $params);
        }
    }
?>

输出

This is number: 4 

在线演示请查看:点击此处

或者

传递两个参数$params[0],$params[1]

<?php
    $builder = new Builder;
    $params = array('This is number: ', 4);

    echo $builder->add($params[0],$params[1]); //returns 'This is number: 4'

    class Builder {
        public function add($string1 ,$number1) {

            return $string1 . $number1;
        }
    }
?>

Online Demo : Click Here


应该使用return implode('',$params);,因为OP在数组值本身中添加了空格。 - Thamilhan
1
我修改了我的帖子,我的示例代码不是我在这个问题上唯一的用例,因此解决方案需要全面考虑。 - kgongonowdoe
不太清楚你想要什么。你是想在函数中传递两个参数吗?你的主要问题是什么? - RJParikh
仍然遇到问题吗?请详细描述您的问题。@kgongonowdoe - RJParikh

0

这里有一个更通用的方法:

只需将数组传递给函数,然后使用 foreach 循环 进行 迭代

<?php
    $builder = new Builder;
    $params = array('This is number: ', 4);

    $builder->add($params); //returns 'This is number: 4'

    class Builder {
        public function add($array) {
            foreach($array as $key => $value){
                //Do something with your values here if you want
                return $key . $value;
            }
        }
    }
?>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接