Warum kann ich in PHP statisch auf nicht statische Methoden zugreifen?

8

Im folgenden Code ist nonStatic () keine statische Methode. Selbst dann kann ich darauf zugreifen, ohne ein Objekt zu erstellen (auf statische Art). Könnte mir bitte irgendjemand beim Verständnis helfen, da dies in anderen Sprachen wie Java nicht möglich ist?

%Vor%     
Veeshoo 01.05.2012, 02:06
quelle

3 Antworten

6

Es ist erlaubt, aber es generiert eine E_STRICT Warnung:

%Vor%

In den früheren OO-Implementierungen von PHP wurde dies stillschweigend erlaubt, aber seither wurden bessere Praktiken übernommen.

Das Gegenteil funktioniert jedoch ohne Probleme:

%Vor%

Dies druckt Hello world .

    
Ja͢ck 01.05.2012 02:19
quelle
2

Es sieht so aus, als ob die Entwickler von PHP keinen Wert darin sehen, den statischen Zugriff von nicht statischen Methoden zu verbieten. Dies ist nur eines dieser idiosynkratischen Features von PHP, die eigentlich keinen Zweck erfüllen. Es ist sicherlich eine schlechte Programmierpraxis, eine nicht statische Methode statisch aufzurufen, aber in PHP ist es möglich. Vielleicht werden sie das in einer zukünftigen Version von PHP nicht zulassen, aber im Moment ist es nur ein Teil der Sprache.

Bearbeiten:

Glücklicherweise ist das Gegenteil nicht erlaubt - Sie können eine statische Methode nicht aus einem Objektkontext aufrufen. Wie Jack weiter unten ausgeführt hat, können Sie eine statische Methode von einem aufrufen Objektkontext - kaum eine Best Practice im OOP-Paradigma, aber es ist erlaubt.

    
Andrew 01.05.2012 02:10
quelle
0

Nicht sicher, wahrscheinlich einige PHP-Magie (es ist manchmal ein bisschen so), aber Sie sollten es nicht tun.

Lesen Sie hier mehr Ссылка

Sie zeigen auch ein ähnliches Beispiel, aber beachten Sie:

Beim Aufruf von nicht statischen Methoden wird statisch eine E_STRICT-Warnung generiert, was bedeutet, dass diese magische Fähigkeit in zukünftigen Versionen verschwinden kann. Also tu es nicht:)

    
PorridgeBear 01.05.2012 02:09
quelle

Tags und Links