質問
function t1()
{
echo 1;
}
function t2()
{
echo 2;
}
$funcs = array(t1,t2);
$length = count($funcs);
for($i=0;$i<$length;$i++)
{
$funcs[$i]();
}
私はこの小さなPHPファイルを実行すると:
PHPの注意:未定義の定数T1を使用する - Dにおける仮定は、 'T1':行11の\ jobirn \テスト\のstr.php
PHPの注意:未定義の定数T2の使用 - Dにおける仮定は、 'T2':行11の\ jobirn \テスト\のstr.php
どのように私は、これらの注意事項を取り除くことができますか? 12
解決
あなたは通知を取得します。 これを行うと、
$functions = array(t1, t2);
PHPエンジンは、T1、およびT2を見て、定数として、それを解決しようとしますが、それはT1 / T2という名前の定数を見つけることができないので、それはあなたが、配列(「T1」、T2「を入力したかったこと「を前提としてい」 「); あなたがのvar_dump($関数)を行う場合は、配列内の項目が文字列であることを確認することができます。
は、
のように、関数として文字列を呼び出そうとすると$functions[0]()
PHPは文字列と同じ名前の関数を探します。私は、これは、より多くの反射を利用してのようなものです、関数ポインタとして文字列を使用して、これを呼び出すことはありません。 PHPは、「変数の機能」と呼んでいます、参照してください。
http://hu2.php.net/manual/en /functions.variable-functions.phpする
だから、通知を取り除くための正しい方法はあります:
$functions = array('t1', 't2');
タグない理由について
't1'();
動作しませんか?残念ながら答えはありません。それは地獄の癖として、これらの迷惑なのかなりの数がありますが、PHPのです。
:それは同じ癖ですexplode(':', 'one:two:three')[0];
Parse error: syntax error, unexpected '[' in php shell code on line 1
編集:
構文を参照して、上記の配列は、それが配列が逆参照と呼ばれる、PHP5.4で提供されます。
他のヒント
$funcs = array('t1','t2');
直感が、それはそれがどのように動作するかです。
この問題に対する作業ラウンドは、
からphp.iniの設定を変更することですerror_reporting = E_ALL
タグに
error_reporting = E_ALL & ~E_NOTICE
のerror_reporting()関数をチェックします:
http://us2.php.net/manual/en /function.error-reporting.phpする
それはあなたが表示されたエラー、通知や警告のレベルを設定できます。
たとえば、あなたがエラーと警告なしの通知を希望する場合:
するerror_reporting(E_ERROR | E_WARNING);
あなたは、文字列を意味する場合文字列の宣言を使用します/ P>
$funcs = array('t1','t2');
ににもvaraible機能にnoreferrer">章をrel="nofollow href="http://docs.php.net/manual/en/functions.variable-functions.php"
関数を呼び出すために文字列を使用するには、
中括弧を使用する必要があります'hello'() // wont work
$hello = 'hello'; $hello() // will work
それが{ ''}()doesntの仕事らしい編集します。 i>は、それがために使用覚えている。<