0

一連のテキスト変換を連想配列で管理したいと考えています。

この例は機能しますが、通知が生成されます。配列が定義されているファイルとは別のファイルでルールが評価される場合は機能しません。どうすればこの問題を回避できますか?

コード

<?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 のバージョンは PHP 5.3.27 で、今のところ 5.3 との互換性を維持する必要があります。

4

3 に答える 3

2

例には関数の配列ではなく、関数名(文字列として)があるため、単語を引用するだけです。

$a = array(
" a " => "trim",
" b " => "noop",
" c " => "trimAndUpper",
);
于 2013-10-09T12:38:48.913 に答える
1

あなたのコード:

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

ここでの問題は、関数呼び出しが引用符で囲まれた文字列内にあることです。このように変数を参照することはできますが、文字列内から関数を呼び出すことはできません。

解決策: 関数呼び出しを文字列から取り出します。

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

配列定義にも問題があります。

" a " => trim,

ここでの関数名 (例: trim) は、このように名前だけで参照することはできません。それらを文字列として宣言する必要があります。

" a " => "trim",
于 2013-10-09T12:38:23.180 に答える