どのようにここではPHP通知を取り除くには? [閉まっている]

StackOverflow https://stackoverflow.com/questions/895188

  •  23-08-2019
  •  | 
  •  

質問

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

役に立ちましたか?

解決

PHPは、ファーストクラスのオブジェクトとしての機能を扱っていないため、

あなたは通知を取得します。 これを行うと、

$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>は、それがために使用覚えている。<

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top