Frage

function t1()
{
  echo 1;
}
function t2()
{ 
  echo 2;
}

$funcs = array(t1,t2);

$length = count($funcs);
for($i=0;$i<$length;$i++)
{
$funcs[$i]();
}

, wenn ich ausführen diese kleine PHP-Datei:

PHP Hinweis: Die Verwendung von undefinierter Konstante t1 - angenommen 't1' in D: \ jobirn \ test \ str.php in Zeile 11

PHP Hinweis: Die Verwendung von undefinierter Konstante t2 - angenommen 'T2' in D: \ jobirn \ test \ str.php in Zeile 11

Wie kann ich diese Hinweise loswerden? 12

War es hilfreich?

Lösung

Sie eine Nachricht erhalten, weil PHP-Funktionen als First-Class-Objekte nicht behandeln. Wenn Sie dies tun

$functions = array(t1, t2);

Die PHP-Engine sieht t1 und t2, und versucht, es als eine Konstante zu lösen, sondern weil es nicht eine Konstante mit dem Namen T1 / T2 finden, es „geht davon aus“, dass Sie wollten array ( ‚t1‘ geben, t2‘ ‚); Wenn Sie eine var_dump ($ Funktionen) zu tun, können Sie die Elemente in der Reihe sehen, dass Strings sind.

Wenn Sie versuchen, eine Zeichenfolge als eine Funktion aufzurufen, wie

$functions[0]()

PHP wird mit dem gleichen Namen wie die Zeichenfolge für eine Funktion suchen. Ich würde nicht nennen als eine Zeichenfolge als Funktionszeiger verwendet, ist dies eher wie Reflexion verwendet wird. PHP nennt es "variable Funktionen" finden Sie unter:

http://hu2.php.net/manual/en /functions.variable-functions.php

Also, die richtige Art und Weise der Bekanntmachung loszuwerden ist:

$functions = array('t1', 't2');

Über warum funktioniert

't1'();

nicht funktionieren? Leider gibt es keine Antwort. Es ist PHP, es wie die Hölle Macken eine gute Anzahl dieser ärgerlich ist. Es ist die gleiche Marotte wie:

explode(':', 'one:two:three')[0];
Parse error: syntax error, unexpected '[' in php shell code on line 1

Edit:
Die oben genannten Array-Syntax referenziert ist in PHP5.4 verfügbar, es heißt dereferencing Array.

Andere Tipps

$funcs = array('t1','t2');

unintuitive, aber das ist, wie es funktioniert

Die Arbeit-Runde zu diesem Thema ist die php.ini Einstellungen von

zu ändern
error_reporting = E_ALL 

error_reporting = E_ALL & ~E_NOTICE

Schauen Sie sich die error_reporting () Funktion:

http://us2.php.net/manual/en /function.error-reporting.php

Damit können Sie konfigurieren, welche Ebene der Fehler, Hinweise und Warnungen angezeigt werden.

Zum Beispiel, wenn Sie Fehler und Warnungen und keine Hinweise:

error_reporting (E_ERROR | E_WARNING);

Verwenden Sie Zeichenfolge Erklärungen wenn Sie Zeichenfolgen bedeuten:

$funcs = array('t1','t2');

Siehe auch die Kapitel über varaible Funktionen rel="nofollow in der PHP-Handbuch.

Saiten verwenden, um eine Funktion aufzurufen, sollten Sie geschweifte Klammern verwenden

'hello'() // wont work
$hello = 'hello'; $hello() // will work

bearbeiten es scheint { ''} () nicht funktioniert. Ich erinnere mich, es zu verwenden>. <

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top