1. Können nicht-statische Methoden in PHP statisch aufgerufen werden?
Heute wurde ich gefragt, ob ich die Methode className::methodName() in PHP verwenden kann, um eine Methode aufzurufen, die nicht als statisch deklariert ist. Meiner Meinung nach habe ich diese Verwendung schon einmal gesehen, bin mir aber etwas unsicher. Wie wir alle wissen, werden Methoden in Handbüchern oder Tutorials in statische Methoden und nicht statische Methoden unterteilt. Normalerweise müssen die Methoden, die wir statisch aufrufen, statische Methoden sein.
Was passiert, wenn wir eine nicht statische Methode aufrufen? Machen Sie zuerst den Test.
Führen Sie Folgendes aus, und der zurückgegebene Fehler ist wie folgt folgt:
1 |
Fatal error: Non-static method test::test() cannot be called statically in /home/×××/test.php |
2 |
on line 7 Call Stack: 0.0002 332548 1. {main}() /home/×××/test.php:0 |
Zu diesem Zeitpunkt denken Sie vielleicht, dass der Anruf nicht statisch ist Methoden sind statisch nicht machbar, aber tatsächlich ist es noch zu früh, um eine Schlussfolgerung zu ziehen, da die test()-Methode etwas ganz Besonderes ist. Sie hat den gleichen Namen wie die Klasse und ist eine Konstruktormethode. Lasst uns weiter testen.
Ausführungsergebnis:
Das zeigt das , Es ist möglich, nicht-statische Methoden statisch aufzurufen, es ist jedoch nicht erlaubt, Konstruktoren statisch aufzurufen. Um diese Schlussfolgerung zu überprüfen, habe ich folgenden Test durchgeführt:
Die Ausführungsergebnisse lauten wie folgt:
1 |
Fatal error: Constructor test::test() cannot be static in /home/xxx/test.php on line 9 |
Der Konstruktor kann nicht sein Die obige Schlussfolgerung ist also korrekt.
Aber dieses Ergebnis ist in der Tat etwas ganz Besonderes, denn vielleicht kann nur PHP statisch nicht-statische Methoden aufrufenWenn Sie eine nicht-statische Methode statisch aufrufen Folgender Fehler wird gemeldet:
1 |
Cannot make a static reference to the non-static method showString() from the type HelloWorldApp |
Ich habe nicht nacheinander andere Sprachen ausprobiert, aber das reicht aus Um die Besonderheit von PHP zu veranschaulichen, habe ich keine relevanten Anweisungen für diese Situation gefunden.
2. Sollten statische Aufrufe auf nicht-statische Methoden angewendet werden?
Können wir diese Methode anstelle der statischen Methode verwenden? Erstens ist es aus Sicht der Codelesbarkeit natürlich nicht empfehlenswert, nicht statische Methoden statisch aufzurufen , was die Betreuer verwirren wird.
Als nächstes werden wir einige Experimente durchführen, um zu sehen, ob der statische Aufruf nicht-statischer Methoden gewisse Effizienzvorteile hat.
<🎜 oben Die Ausführungszeit des Codes beträgt hier 18 bis 28 Millisekunden. Testen wir die Standard-Schreibmethode.
6 | for ( $k =0;
$k <10000; $k ++) { |
.
Ich habe herausgefunden, dass WordPress tatsächlich eine so seltsame Aufrufmethode verwendet:
// Ersetzen Sie die Teilzeichenfolgenübereinstimmungen in der Abfrage.
$query = addslashes (WP_MatchesMapRegex::apply($query, $matches));
Hier wird der statische Aufruf verwendet, aber die eigentliche Memberfunktion ist nicht statisch.
3 | static function test2(){ } |
Hinweis: PHP kann nicht statische Eigenschaften nicht statisch aufrufen
6 | for ( $k =0;
$k <10000; $k ++) { |
Fehlerbericht:
Oben wird erläutert, ob nicht statische Methoden in PHP statisch aufgerufen werden können. (Seltsamer Aufruf), einschließlich Aspekten des Inhalts, ich hoffe, dass es für Freunde hilfreich sein wird, die sich für PHP-Tutorials interessieren.