gpt4 book ai didi

php - call_user_func_array() 将数组作为字符串传递 bug?

转载 作者:行者123 更新时间:2023-12-05 09:22:40 24 4
gpt4 key购买 nike

我使用的是 PHP 5.4.25。采取以下代码:

<?php

function works($params=[])
{
var_dump(is_array($params));
var_dump($params);

$params = (array) $params;

var_dump(is_array($params));
var_dump($params);

$params['first_name'] = "Bob";
}

function fails($params=[])
{
var_dump(is_array($params));
var_dump($params);

$params['first_name'] = "Bob";
}

call_user_func_array('works', ['first_name'=>'John', 'last_name'=>'Doe']);
call_user_func_array('fails', ['first_name'=>'John', 'last_name'=>'Doe']);

结果:

bool(false)

string(4) "John"

bool(true)

array(1) {
[0] =>
string(4) "John"
}

bool(false)

string(4) "John"

PHP Warning: Illegal string offset 'name' in /vhosts/site/test.php on line 14
PHP Stack trace:
PHP 1. {main}() /vhosts/site/test.php:0
PHP 2. call_user_func_array() /vhosts/site/test.php:17
PHP 3. fails() /vhosts/site/test.php:17

似乎传递的数组不是有效数组...它仅显示数组的第一个值并且显示为字符串而不是数组...但是您可以随后将字符串转换为数组然后它工作正常......

解决方案显然是在函数的开头将其转换为数组,但似乎您不必这样做。这是一个 PHP 错误吗?我似乎找不到关于此的任何其他报告。

最佳答案

这不是错误,call_user_func_array() 接受一个数组,并将其作为单个参数传递给函数。

如果你有一个函数 do_something($a, $b, $c) 你可以做 call_user_func_array("do_something", array(1, 2, 3)) 它会调用 do_something(1, 2, 3)。如果您只需要调用函数并将数组作为参数传递,则可以使用 call_user_func

这听起来像你想做的:

call_user_func('works', ['first_name'=>'John', 'last_name'=>'Doe']);

如果你坚持使用call_user_func_array,我想你可以这样做:

call_user_func_array('works', [['first_name'=>'John', 'last_name'=>'Doe']]);

它正在传递一个数组数组,因此它将获取数组中的单个元素并将其作为参数传递给函数。

如果方法是动态的,另一种选择是简单地做这样的事情:

$method = "works";
$method(['first_name'=>'John', 'last_name'=>'Doe']);

关于php - call_user_func_array() 将数组作为字符串传递 bug?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25208703/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com