Heim > Backend-Entwicklung > PHP-Tutorial > Können nicht statische Methoden in PHP statisch aufgerufen werden? (seltsamer Anruf)

Können nicht statische Methoden in PHP statisch aufgerufen werden? (seltsamer Anruf)

WBOY
Freigeben: 2016-07-30 13:30:34
Original
1351 Leute haben es durchsucht

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.

1 <?php

2classtest{

3 functiontest() {

4 echo'it works';

5 }

6}

7test::test();

8?>

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.

01 <?php

02classtest {

03 functiontest() {

04 echo'it works';

05 }

06 functiontest2() {

07 echo'it works too';

08 }

09}

10test::test2();

11?>

Ausführungsergebnis:

1 it works too

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:

1 <?php

2classtest{

3 staticfunctiontest() {

4 echo'it works';

5 }

6}

7test::test();

8?>

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.

1 <?php

2classtest{

3 functiontest2() { }

4}

<🎜 oben Die Ausführungszeit des Codes beträgt hier 18 bis 28 Millisekunden. Testen wir die Standard-Schreibmethode.

5

6for($k=0; $k<10000; $k&#43;&#43;) {

7 test::test2();

8}

9?>
.

Ich habe herausgefunden, dass WordPress tatsächlich eine so seltsame Aufrufmethode verwendet:

1 <?php

// Ersetzen Sie die Teilzeichenfolgenübereinstimmungen in der Abfrage.

2classtest{
$query = addslashes (WP_MatchesMapRegex::apply($query, $matches));

Hier wird der statische Aufruf verwendet, aber die eigentliche Memberfunktion ist nicht statisch.

3 staticfunctiontest2(){ }

4}
Hinweis: PHP kann nicht statische Eigenschaften nicht statisch aufrufen

5

6for($k=0; $k<10000; $k&#43;&#43;) {

7 test::test2();

8}

9?>

5         echo'it works';

6     }

7 }

8 echotest::$id;

9 ?>

Fehlerbericht:

1 Fatal error: Access

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.

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage