管理php中的函数数组

时间:2013-10-09 12:35:58

标签: php arrays

我想在关联数组中管理一组文本转换。

该示例有效,但会生成通知。在不同的文件中计算规则然后定义数组的文件时,它将不起作用。我怎样才能解决这个问题呢?

代码

<?php

function noop($x){
    return $x;
}

function trimAndUpper($x){
    return strtoupper(trim($x));
}

$a = array(
    " a " => trim,
    " b " => noop,
    " c " => trimAndUpper,
);

foreach($a as $key=>$func){
    echo "key:'$key' value:'{$func($key)}'\n";
}

输出

❯❯❯ php ./experiment.php
PHP Notice:  Use of undefined constant trim - assumed 'trim' in /tback/src/experiment.php on line 12
Notice: Use of undefined constant trim - assumed 'trim' in /tback/src/experiment.php on line 12
PHP Notice:  Use of undefined constant noop - assumed 'noop' in /tback/src/experiment.php on line 13
Notice: Use of undefined constant noop - assumed 'noop' in /tback/src/experiment.php on line 13
PHP Notice:  Use of undefined constant trimAndUpper - assumed 'trimAndUpper' in /tback/src/experiment.php on line 14
Notice: Use of undefined constant trimAndUpper - assumed 'trimAndUpper' in /tback/src/experiment.php on line 14
key:' a ' value:'a'
key:' b ' value:' b '
key:' c ' value:'C'

php-version是PHP 5.3.27,我现在必须与5.3保持兼容。

3 个答案:

答案 0 :(得分:2)

引用这些词,因为你的例子中没有函数数组,而是函数名(作为字符串)。

$a = array(
" a " => "trim",
" b " => "noop",
" c " => "trimAndUpper",
);

答案 1 :(得分:2)

不幸的是,函数在PHP中不是第一类,你不能用符号名称来引用它们。相反,您的代码试图引用未定义的常量(因此通知)。您可以使用call_user_func

按字符串调用函数名称
" a " => "trim"
/* snip */
echo "key:'$key' value:'" . call_user_func($func, $key) . "'\n";

答案 2 :(得分:1)

您的代码:

echo "key:'$key' value:'{$func($key)}'\n";

这里的问题是函数调用在引用的字符串中。虽然您可以引用这样的变量,但您无法从字符串内部调用函数。

解决方案:从字符串中取出函数调用:

echo "key:'$key' value:'".$func($key)."'\n";

您还遇到阵列定义问题:

" a " => trim,

此处的函数名称(例如trim)不能简单地通过它们的名称来引用;你需要将它们声明为字符串。

" a " => "trim",