【问题标题】:php pass array to function as separate variablesphp传递数组作为单独的变量
【发布时间】:2013-07-31 03:47:21
【问题描述】:

我需要知道如何将数组作为单独的变量传递给函数,例如,

function myfunction($var, $othervar) {
}

$myarray = array('key'=>'val', 'data'=>'pair');

这是我遇到问题的地方,以下似乎不起作用:

$return = myfunction(extract($myarray));

如果我理解正确的话,应该和

$return = myfunction($key, $data);

其中 $key='val' 和 $data='pair'

谁能给我解释一下。

【问题讨论】:

  • 你在找call_user_func_array()
  • 这个怎么样:它是:$this->_obj[$key]->$function(extract($vars));现在是: return call_user_func_array(array(get_class($this->_obj[$key]), $function), $vars);但这不起作用,因为“不能”静态调用非静态方法
  • 鉴于您在上面看到的内容,您将如何在此处实现 array_walk?

标签: php object


【解决方案1】:

如果我理解你的问题,那么试试这个

$return = myfunction($myarray["key"],$myarray["data"]);

这里我们只是将关联数组作为参数传递。

【讨论】:

  • 这很有用,但问题是我不知道有多少变量或键是什么,我将在下面的答案中发布完整的代码
  • 我应该忽略“严格标准”错误消息并使用 call_user_func_array 吗?
【解决方案2】:
    public function get($key=null, $function='', array $vars=array()) {
        if ($key==null || !array_key_exists($key, $this->_obj)) {
            return null;
        }

var_dump($vars);

        if (!empty($function)) {
            return $this->_obj[$key]->$function(array_walk($vars));
//          return call_user_func_array(array(get_class($this->_obj[$key]), $function), $vars);
//          return $this->_obj[$key]->$function(extract($vars));
        }
        return $this->_obj[$key];
    }

【讨论】:

  • 现在使用 call_user_func_array 我得到了这个:使用 $this when not in object context in C:\aDomain\profordable\lib\Class_Database.php on line 42 因为显然使用 call_user_function_array(array('class ', 'function'), $vars) 以数组为函数名,静态调用方法
  • 我将 call_user_func_array 中的类作为字符串而不是作为对象传递,我现在所拥有的如下所示,它似乎可以工作,尽管更多输入将不胜感激
【解决方案3】:
    public function get($key=null, $function='', array $vars=array()) {
        if ($key==null || !array_key_exists($key, $this->_obj)) {
            return null;
        }
        if (!empty($function)) {
            return call_user_func_array(array($this->_obj[$key], $function), $vars);
        }
        return $this->_obj[$key];
    }

$registry = Registry_Object::Singleton();
//...later on
$registry = $GLOBALS['registry'];
$registry->set('Content', new Content($_SERVER['REQUEST_URI']));
$id = $registry->get('Content', 'GetIdFunc');
$registry->set('DB', 'Database');
$query = $registry->get('DB', 'Read', array("SELECT TITLE, CONTENT FROM APP_CONTENT WHERE ID=$id"));
print '<h1>'.$query[0]['TITLE'].'</h1>';
print Template_Helper::TPL_Paragraphs($query[0]['CONTENT']);

谢谢大家

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-08-05
    • 1970-01-01
    • 2023-03-24
    • 1970-01-01
    • 2014-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多