Greifen Sie über eine statische Methode auf eine nicht statische Eigenschaft zu

8
%Vor%

Ich möchte so etwas tun, aber ich kann keinen Weg finden, der funktioniert. Die Eigenschaft muss statisch sein ...

    
WhiteBlue 27.02.2013, 17:32
quelle

5 Antworten

7

Sie können nicht von statischen Methoden auf nicht statische Eigenschaften zugreifen. Nicht statische Eigenschaften gehören nur zu instanziierten Objekten, wobei jedes instanziierte Objekt einen eigenen Eigenschaftswert hat.

Ich werde in einem Beispiel veranschaulichen, dieser Code funktioniert nicht :

%Vor%     
Marko D 27.02.2013 17:33
quelle
5

Sie können darauf zugreifen, indem Sie ein neues Objekt instanziieren ( $self = new static; ). Der Beispielcode:

%Vor%     
mrabbani 15.10.2016 05:08
quelle
4

wie marko sagte Sie können nicht von statischen Methoden auf nicht statische Eigenschaften zugreifen. wenn möglich, ändern Sie Ihre Eigenschaft in statisch und dann funktioniert Ihr Code.

Ich habe so etwas gemacht ..

%Vor%

hoffe es hilft jemandem:)

- Prost

    
Developer 26.06.2013 09:53
quelle
0

Ähnliche Beiträge hier

Die einzige Möglichkeit, eine nicht statische Methode von einer statischen Methode aus aufzurufen, ist eine Instanz der Klasse, die die nicht statische Methode enthält. Eine nicht statische Methode ist definitionsgemäß eine, die als ON einer Instanz einer Klasse bezeichnet wird, während eine statische Methode zur Klasse selbst gehört.

    
happygilmore 27.02.2013 17:40
quelle
0

Es ist am besten, die Spezifikationen für das Objekt zu bestimmen, wenn Sie es erstellen, und es klingt, als ob Ihre Spezifikation des Objekts nicht mit dem Muster übereinstimmt, das Sie gewählt haben.

Im Allgemeinen sollten Sie sich fragen: "Muss ich nur eine einzelne Instanz eines Objekts (statisch) oder mehr als eines haben?"

Für diese bestimmte Instanz (Verbindung zu und Abfrage einer Datenbank) ist es nicht ratsam, ein instanziiertes Objekt für das Datenbankobjekt zu haben, es sei denn, Sie müssen mehrere Verbindungen zu der Datenbank herstellen.

Damit haben Sie einen Anwendungsfall für ein instanziiertes gegen statisches Objekt. Mehrere gleichzeitige Verbindungen können die Datenbank überlasten, abhängig von der Konfiguration und wie oft eine Verbindung in einer einzigen Ausführung erstellt wird.

Vor diesem Hintergrund gibt es verschiedene OOP-Design- "Muster" für PHP, die für die Architektur von Objekten hilfreich sind. Siehe Ссылка für einen guten Überblick über die häufigeren Muster.

Für ein funktionierendes Beispiel Ссылка

Hinweis Ich habe mysqli in mysqli2 umbenannt und eine falsche Klasse für die Abfrage erstellt und der Verbindung und der Objekterstellung ein Tracking hinzugefügt.

%Vor%     
fyrye 11.09.2014 20:01
quelle

Tags und Links