wie von PHP Hinweis loswerden hier erhalten? [geschlossen]
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
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 ändernerror_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>. <