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)

Jul 30, 2016 pm 01:30 PM
nbsp php test

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&lt;10000; $k&#43;&#43;) {

7 test::test2();

8}

9?&gt;
.

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

1 &lt;?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&lt;10000; $k&#43;&#43;) {

7 test::test2();

8}

9?&gt;

5         echo'it works';

6     }

7 }

8 echotest::$id;

9 ?&gt;

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.

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

Heiße Artikel -Tags

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

PHP 8.4 Installations- und Upgrade-Anleitung für Ubuntu und Debian PHP 8.4 Installations- und Upgrade-Anleitung für Ubuntu und Debian Dec 24, 2024 pm 04:42 PM

PHP 8.4 Installations- und Upgrade-Anleitung für Ubuntu und Debian

So richten Sie Visual Studio-Code (VS-Code) für die PHP-Entwicklung ein So richten Sie Visual Studio-Code (VS-Code) für die PHP-Entwicklung ein Dec 20, 2024 am 11:31 AM

So richten Sie Visual Studio-Code (VS-Code) für die PHP-Entwicklung ein

Die Smartwatch Huawei Watch GT 5 erhält ein Update mit neuen Funktionen Die Smartwatch Huawei Watch GT 5 erhält ein Update mit neuen Funktionen Oct 03, 2024 am 06:25 AM

Die Smartwatch Huawei Watch GT 5 erhält ein Update mit neuen Funktionen

Wie analysiert und verarbeitet man HTML/XML in PHP? Wie analysiert und verarbeitet man HTML/XML in PHP? Feb 07, 2025 am 11:57 AM

Wie analysiert und verarbeitet man HTML/XML in PHP?

PHP -Programm zum Zählen von Vokalen in einer Zeichenfolge PHP -Programm zum Zählen von Vokalen in einer Zeichenfolge Feb 07, 2025 pm 12:12 PM

PHP -Programm zum Zählen von Vokalen in einer Zeichenfolge

Die 10 besten PHP-CMS-Plattformen für Entwickler im Jahr 2024 Die 10 besten PHP-CMS-Plattformen für Entwickler im Jahr 2024 Dec 05, 2024 am 10:29 AM

Die 10 besten PHP-CMS-Plattformen für Entwickler im Jahr 2024

Der neue Xiaomi Mijia Graphene Oil Heater mit HyperOS ist da Der neue Xiaomi Mijia Graphene Oil Heater mit HyperOS ist da Oct 02, 2024 pm 09:02 PM

Der neue Xiaomi Mijia Graphene Oil Heater mit HyperOS ist da

7 PHP-Funktionen, die ich leider vorher nicht kannte 7 PHP-Funktionen, die ich leider vorher nicht kannte Nov 13, 2024 am 09:42 AM

7 PHP-Funktionen, die ich leider vorher nicht kannte

See all articles