Heim > Backend-Entwicklung > PHP-Tutorial > PHP-objektorientierte Essenz

PHP-objektorientierte Essenz

WBOY
Freigeben: 2016-08-08 09:32:20
Original
900 Leute haben es durchsucht

1 Verwendung von Erweiterungen zur Implementierung von Vererbung, Überladung und der Bedeutung magischer Methoden

Klasse B erweitert A

Bei der Deklaration muss B keine Methoden in A haben

aufgerufen When $b=new B();

$b->Method() in A;

$b->Attribute in A=1;

$b->Method() in B;

$b->Method() in B;

If $a=new A();

Ja

$a->Method() in A;

$a->Attribute=1 in A;

Nicht möglich

$a->Method() in B;

$a->Method() in B;

Überladung: B erbt A und implementiert in B ein Methodenattribut mit demselben Name als A.

Das „Überladen“ in PHP unterscheidet sich von den meisten anderen objektorientierten Sprachen. Das traditionelle „Überladen“ wird verwendet, um mehrere Klassenmethoden mit demselben Namen bereitzustellen, aber jede Methode hat unterschiedliche Parametertypen und -nummern.

Magische Methode: PHP behandelt alle Klassenmethoden, die mit __ (zwei Unterstriche) beginnen, als magische Methoden. Wenn Sie also Ihre eigenen Klassenmethoden definieren, stellen Sie ihnen nicht __ voran.

2 Erben Sie mithilfe der Sichtbarkeit von privaten und geschützten Zugriffsmodifikatoren

Die Attributmethode „privat“ kann nicht vererbt werden

Die Attributmethode „geschützt“ ist außerhalb der Klasse nicht sichtbar und kann vererbt werden

Auf die durch die öffentliche Attributmethode definierten Klassenmitglieder kann überall zugegriffen werden

3 Anwendung des Doppelpunkts:: in PHP

Die Operation „::“ wird häufig in PHP-Klassen gesehen Code-Operator, dies ist der Bereichsqualifizierungsoperator, dargestellt durch einen Doppelpunkt „::“, der verwendet wird, um die Ebenen verschiedener Bereiche in der Klasse anzugeben. Die linke Seite ist der Bereich und die rechte Seite sind die Mitglieder des Zugriffsbereichs.

In PHP sind zwei Bereiche definiert: self und parent (statischer Bereich wird in PHP6 bereitgestellt). Der

Bereichsauflösungsoperator (auch bekannt als Paamayim Nekudotayim) oder einfacher ein Doppelpunktpaar kann auch für den Zugriff auf statische Elemente, Methoden und Konstanten verwendet werden kann in Unterklassen verwendet werden, um Mitglieder und Methoden in übergeordneten Klassen zu überschreiben.

class MyClass {
const
CONST_VALUE = 'A konstanter Wert';
}
echo
MyClass::CONST_VALUE;

class OtherClass extends MyClass
{
public static
$my_static = 'static var';
öffentliche statische Funktion
doubleColon () {
echo
parent::CONST_VALUE "n"; echo
self
::$my_static "n"; }}
OtherClass

::
doubleColon(); //Unterklasse deckt übergeordnete Klasse ab

Klasse

MyClass

{geschützte Funktion
myFunc
() {
echo "MyClass::myFunc()n"
;
}}class
OtherClass

extends
MyClass{ 
// Methoden in der übergeordneten Klasse überschreiben
öffentliche Funktion
myFunc
() {// Die überschriebene Methode kann jedoch weiterhin

aufgerufen werden
parent
::
myFunc(); echo "OtherClass::myFunc()n"
;
}}
$class

= new
OtherClass(); $class
->
myFunc();4 php Die Rolle von this, self und parent
this: ist ein Zeiger auf die aktuelle Objektinstanz, nicht auf ein anderes Objekt oder eine andere Klasse.

self: Stellt den Bereich der aktuellen Klasse dar. Im Gegensatz dazu stellt es keine bestimmte Instanz der Klasse dar. Self kann nicht in Code außerhalb der Klasse verwendet werden und kann sich nicht in der Vererbungshierarchie identifizieren. Standort. Das heißt, wenn self in einer erweiterten Klasse verwendet wird, ruft es nicht die Methode der übergeordneten Klasse auf, sondern die überladene Methode der erweiterten Klasse. Self zeigt auf die Klasse selbst, das heißt, self zeigt nicht auf ein instanziiertes Objekt.

Im Allgemeinen wird self verwendet, um auf statische Variablen in der Klasse zu verweisen.

private static $firstCount = 0;
private $lastCount;
//Konstruktorfunktion
function __construct()
{
$this->lastCount = ++self:$ firstCount; //Verwenden Sie self, um statische Variablen aufzurufen. Sie müssen Folgendes verwenden::(Domänenoperatorsymbol)
}

Parent: Gibt den Bereich der übergeordneten Klasse der aktuellen an Klasse, und der Rest folgt. Die Eigenschaften des Selbst sind die gleichen. parent ist ein Zeiger auf die übergeordnete Klasse. Im Allgemeinen verwenden wir parent, um den Konstruktor der übergeordneten Klasse aufzurufen.

//Geerbter Klassenkonstruktor
function __construct( $personSex, $personAge )
{
parent::__construct( "test" ); //Use parent to call The Konstruktor der übergeordneten Klasse
$this->personSex = $personSex;
$this->personAge = $personAge;
}

5 Konstruktor und Analyse-Konstruktor

Eine Klasse mit einem Konstruktor ruft diese Methode jedes Mal zuerst auf, wenn ein Objekt erstellt wird. Daher eignet sie sich sehr gut für einige Initialisierungsarbeiten vor der Verwendung des Objekts.

Funktion __construct() {}
Wenn ein Konstruktor in einer Unterklasse definiert ist, wird der Konstruktor seiner übergeordneten Klasse nicht heimlich aufgerufen. Um den Konstruktor der übergeordneten Klasse auszuführen, müssen Sie parent::__construct() im Konstruktor der Unterklasse aufrufen.

PHP 5 führte das Konzept von Destruktoren ein, ähnlich wie bei anderen objektorientierten Sprachen wie C++. Ein Destruktor wird ausgeführt, wenn alle Verweise auf ein Objekt entfernt werden oder wenn das Objekt explizit zerstört wird.

Funktion __destruct() {}

6 letzte Schlüsselwörter

PHP 5 Ein neues endgültiges Schlüsselwort hinzugefügt. Wenn eine Methode in der übergeordneten Klasse als endgültig deklariert ist, kann die Unterklasse die Methode nicht überschreiben. Wenn eine Klasse als endgültig deklariert ist, kann sie nicht vererbt werden.

7 Vererbung und Konstruktor

父类 子类 结果
有构造函数 无构造函数 父构造
有构造函数 有构造函数 子构造

8 Schnittstelle

Sie können eine Schnittstelle über die Schnittstelle definieren, genau wie die Definition einer Standardklasse.

Hinweis:

1) Aber alle darin definierten Methoden sind leer

2) Alle in der Schnittstelle definierten Methoden müssen sein öffentlich, das ist das Merkmal der Schnittstelle

3) Bei der Implementierung mehrerer Schnittstellen darf die Methode in der Schnittstelle nicht denselben Namen haben

4 )-Schnittstelle kann auch mit dem Operator

extends vererbt werden;

5) Konstanten können auch in der Schnittstelle definiert werden. Schnittstellenkonstanten und Klassenkonstanten werden genau gleich verwendet. Sie sind alle feste Werte und können nicht durch Unterklassen oder Unterschnittstellen geändert werden.

//Deklarieren Sie eine 'iTemplate'-Schnittstelle
Schnittstelle iTemplate
{öffentliche Funktion
setVariable($name, $var);öffentliche Funktion
getHtml($template);}

// Implementieren Sie die Schnittstelle // Die folgende Schreibweise ist korrekt

class
Template implements iTemplate
{
private
$vars = array();
öffentliche Funktion
setVariable($name, $var) {
$this
->vars[$name] = $var; }
öffentliche Funktion
getHtml
($template) { foreach(
$this
->vars as $name => $value) { >.'}'
, $value, $template); ; }}9 Eigenschaften

Die variablen Mitglieder der Klasse werden „Eigenschaften“ genannt, die Attributdeklaration beginnt mit dem Schlüsselwort
public oder protected
oder
private
, gefolgt von einer Variablen. Die Variablen in den Attributen können initialisiert werden, aber der initialisierte Wert muss eine Konstante sein. Die Konstante bezieht sich hier auf die Konstante, die sich das PHP-Skript in der Kompilierungsphase befindet, und nicht auf die Konstante, die in der laufenden Phase nach der Kompilierungsphase berechnet wird.

In PHP5 sind zwei Funktionen „__get()“ und „__set()“ vordefiniert, um seine Attribute abzurufen und zuzuweisen, und „__isset()“, um die Attribute zu überprüfen und zuzuweisen Methode „__unset()“ zum Löschen von Attributen.
Einfach ausgedrückt besteht die eine darin, den Wert zu erhalten, und die andere darin, den Wert zuzuweisen. , die beiden Methoden „__set()“ und „__get()“, diese beiden Methoden existieren nicht standardmäßig, sondern werden manuell zur Klasse hinzugefügt. Wie die Konstruktormethode (__construct()) werden sie der Klasse hinzugefügt. Diese beiden Methoden können Sie natürlich auch entsprechend Ihrem persönlichen Stil hinzufügen: //__get() Methode wird verwendet, um private Attribute abzurufen
ansehen Klarschrift in die Zwischenablage

  1. class Person{ 🎜>//Das Folgende sind die Mitgliedsattribute von Personen
  2. privat
  3. $name// Der Name der Person privat
  4. $sex
  5. ; /Geschlecht der Person privat $Alter
  6. ; /Alter der Person
  7. //__get()-Methode wird verwendet, um private Attribute zu erhalten privat
  8. Funktion __get(
  9. $property_name
  10. ){ if(isset($this->
  11. $property_name
  12. )){ return($this->
  13. $property_name
  14. ); }else { return(NULL);
  15. //__set( )-Methode wird verwendet, um privat festzulegen Eigenschaften
  16. privat
  17. Funktion __set(
  18. $property_name
  19. , $value){ $this-> ;$property_name =
  20. $value
  21. ; //__isset() method privat
  22. Funktion
  23. __isset(
  24. $nm
  25. ){
  26. echo
  27. "isset()-Funktionsbestimmung, privates Mitglied, automatisch aufrufen
    "
    ; return isset($this->
  28. $nm); ) Methode privat
  29. Funktion __unset($nm ){ echo
  30. “ wird automatisch aufgerufen, wenn die unset()-Funktion außerhalb der Klasse verwendet wird, um ein privates Mitglied zu löschen < br>"
  31. ;  unset(
  32. $this-> $nm); }
  33. } =neu Person(); 🎜>"das ist ein Personenname"
  34. ;
  35. //Bei Verwendung der isset()-Funktion zur Bestimmung von privat Mitglieder, __isset() wird automatisch aufgerufen. Die Methode hilft uns beim Vervollständigen und das Rückgabeergebnis ist wahr echo
  36. var_dump(isset(
  37. $p1
  38. ->name)).
  39. "
    "
  40. ;
  41. $p1->name."
    "; Wenn Sie die Funktion unset() zum Löschen privater Mitglieder verwenden, wird die Methode __unset() automatisch aufgerufen, um uns bei der Vervollständigung zu helfen . Löschen Sie das private Attribut „name“
  42. unset($p1->name); 🎜>// wurde gelöscht, daher erfolgt keine Ausgabe für diese Zeile
  43. echo
  44. $p1->name; [php] Ansicht Klarschrift
    1. class Person{ //Im Folgenden sind die Mitgliedsattribute der Person privat $ aufgeführt name; / /Name der Person privat $sex; //Geschlecht der Person privat $age; //Alter der Person //__get() Methode wird verwendet, um private Eigenschaften zu erhalten private Funktion __get($property_name){ if(isset($this-> ; $property_name)){ return($this->$property_name);}else
    2. { return (NULL); } } } //__set()-Methode wird zum Festlegen privater Eigenschaften verwendet private Funktion __set($property_name, $value){ $this->$property_name = $value } / /__isset() Methode private Funktion __isset($nm){ echo "isset() Funktion ruft automatisch auf, wenn ein privates Mitglied ermittelt wird
      "; return isset($this->$nm); } //__unset() Methode private Funktion
    3. __unset($nm){ echo "Wird automatisch aufgerufen, wenn die Funktion unset() außerhalb der Klasse verwendet wird, um ein privates Mitglied zu löschen
      "
      ; unset($this ->$nm); } } $p1=neu Person(); $p1->name="das ist ein Personenname"; > //Wenn Sie die Funktion isset() zum Messen privater Mitglieder verwenden, wird die Methode __isset() automatisch aufgerufen, um uns bei der Vervollständigung zu helfen, und das Rückgabeergebnis ist true echo var_dump(isset($p1->name))."
      "; echo $p1->name."
      "; //Wenn Sie die Funktion unset() zum Löschen privater Mitglieder verwenden, wird die Methode __unset() automatisch aufgerufen, um uns bei der Erledigung der Aufgabe zu helfen Löschen Sie das private Attribut „name“
    4. unset(
    5. $p1->name); >//wurde gelöscht, daher wird diese Zeile nicht ausgegeben. echo $p1->name ?> 10 Klonen Objektkopie Dies kann mit dem Schlüsselwort clone erfolgen (wenn die Methode __clone() im Objekt vorhanden ist, wird sie zuerst aufgerufen). Die Methode __clone() in einem Objekt kann nicht direkt aufgerufen werden. Wenn das Objekt kopiert wird, führt PHP5 eine „flache Kopie“ aller Eigenschaften des Objekts durch. Die -Referenzen in allen Attributen bleiben unverändert
    6. und verweisen auf die ursprünglichen Variablen. Wenn die Methode __clone() definiert ist, wird die Methode __clone() im neu erstellten Objekt (dem durch Kopieren generierten Objekt) aufgerufen und kann verwendet werden, um den Wert des Attributs zu ändern (falls erforderlich).

11 PHP-Referenz


dient zum Hinzufügen des &-Symbols vor Variablen, Funktionen, Objekten usw.


in PHP-Anführungszeichen bedeutet: Verschiedene Namen greifen auf denselben Variableninhalt zu.
unterscheidet sich von Zeigern in der C-Sprache. Der Zeiger in der C-Sprache speichert die Adresse, an der der Inhalt der Variablen im Speicher gespeichert ist.
Variablenreferenz
Mit der Referenz von PHP können Sie zwei Variablen als Referenz verwenden Der gleiche Inhalt
[php]

$a="ABC";
$b =&$a;
echo $a;//Ausgabe hier: ABC
echo $b;//Hier Ausgabe:ABC
$b="EFG";
echo $a;//Der Wert von $a wird hier zu EFG, also geben Sie EFG aus
echo $b;//EFG hier ausgeben
?>
[/php]
Funktionsübergabe Aufruf per Adresse
Ich werde nicht näher auf den Anruf per Adresse eingehen. Der Code ist direkt unten angegeben
[php]
Funktionstest(& $a)
{
$a=$a+100;
}
$ b=1;
echo $b;//Ausgabe 1
test($b); //Was $b an die Funktion übergeben wird hier ist tatsächlich $b Die Speicheradresse, an der sich der Variableninhalt befindet. Sie können den Wert von $b ändern, indem Sie den Wert von $a in der Funktion
echo "
" ändern.

echo $b;//Output 101
[/php]
Es sollte beachtet werden, dass, wenn Sie testen(1) ; Hier tritt ein Fehler auf. Denken Sie über die Referenzrückgabe der Funktion
nach. Schauen Sie sich zuerst den Code an
[php]
function &test ()
{
static $b=0;//Eine statische Variable deklarieren
$b=$b+1;
echo $b;
return $b;
}
$a=test( );//Diese Anweisung gibt den Wert von $b als 1 aus
$a=5;
$a=test();//Diese Anweisung Der Wert von $b wird als 2 ausgegeben
$a=&test();//Diese Anweisung gibt den Wert von $ aus b as 3
$a=5 ;
$a=test();//Diese Anweisung gibt den Wert von $b als 6
[/php]
Erklären Sie unten:
Auf diese Weise erhalten Sie $a=test(); nicht wirklich eine Funktionsreferenzrückgabe , was sich nicht von einem gewöhnlichen Funktionsaufruf unterscheidet: Dies ist PHP. Es ist festgelegt, dass
PHP festlegt, dass die Referenzrückgabe der Funktion über $a=&test() erhalten wird. ;
Was ist eine Referenzrückgabe (im PHP-Handbuch heißt es: Referenzrückgabe wird verwendet, wenn Sie eine Funktion verwenden möchten, um herauszufinden, an welche Variable die Referenz gebunden werden soll). ) Dieser Unsinn hat es mir lange Zeit unmöglich gemacht, ihn zu verstehen.
Um es anhand des obigen Beispiels zu erklären, wird die Funktion in der Methode $a=test() aufgerufen, die nur die Funktion ändert Der Wert der Funktion wird nur $a zugewiesen, und alle Änderungen an $a wirken sich nicht auf $b
in der Funktion aus. Wenn die Funktion über $a=&test() aufgerufen wird, lautet ihre Funktion Die Speicheradresse der $b-Variablen in Return $b und die Speicheradresse der $a-Variablen zeigen auf denselben Ort
, was das Äquivalent dieses Effekts erzeugt ($a=&b;) also ändere $ Der Wert von a ändert auch den Wert von $b, also nach der Ausführung von
$a=&test();
$a=5;
Danach wird der Wert von $b 5
Die statische Variable wird hier verwendet, um jedem die Referenzrückgabe der Funktion verständlich zu machen Die Funktion wird hauptsächlich in Objekten verwendet
Objektreferenz
[php]

Klasse a{
var $abc="ABC";
}
$b=new a;
$c=$ b;
echo $b->abc;//ABC hier ausgeben
echo $c->abc; //ABC hier ausgeben
$b->abc="DEF";
echo $c->abc;//DEF hier ausgeben
?>
[/php]
Der obige Code ist der laufende Effekt in PHP5
In PHP5, das Kopieren von Objekten wird durch Referenzen realisiert. In der obigen Spalte entspricht $b=new a; $c=$b; tatsächlich $b=new $c=&$b;
Die Standardeinstellung in PHP5 ist „call“. Objekte per Referenz, aber manchmal möchten Sie vielleicht eine Kopie eines Objekts erstellen und hoffen, dass Änderungen am Originalobjekt keine Auswirkungen auf die Kopie haben. Zu diesem Zweck definiert PHP eine spezielle Methode namens __clone.
Die Rolle von Referenzen
Wenn das Programm relativ groß ist, viele Variablen auf dasselbe Objekt verweisen und Sie es nach der Verwendung des Objekts manuell löschen möchten, empfehle ich persönlich die Verwendung des „&“ "-Methode und verwenden Sie dann die Methode $var = null zum Löschen. Andernfalls verwenden Sie die Standardmethode von PHP5. Darüber hinaus wird für die Übertragung großer Arrays in PHP5 empfohlen, schließlich die Methode „&“ zu verwenden spart Speicherplatz.
Referenz aufheben
Wenn Sie eine Referenz aufheben, brechen Sie einfach die Bindung zwischen dem Variablennamen und dem Variableninhalt auf. Dies bedeutet nicht, dass die Variableninhalte zerstört werden.Zum Beispiel:

$a = 1;
$b =& $ a ;
unset ($a);
?>
wird $b nicht deaktivieren, nur $a.
Globale Referenz
Wenn Sie eine Variable mit globalem $var deklarieren, erstellen Sie tatsächlich eine Referenz auf die globale Variable. Mit anderen Worten, es ist dasselbe wie:

$var =& $GLOBALS["var"] ;
?>
Das bedeutet, dass beispielsweise durch unset $var keine globale Variable gelöscht wird.
$this
In einer Methode eines Objekts ist $this immer eine Referenz auf das Objekt, das es aufruft.
//Hier ist noch eine kleine Episode
Die Zeigerfunktion (ähnlich dem Zeiger) der Adresse in PHP wird nicht vom Benutzer selbst implementiert, sondern von ihm Zend Core, die Referenz in PHP übernimmt das Prinzip „Copy-on-Write“, das heißt, solange keine Schreiboperation stattfindet, werden Variablen oder Objekte, die auf dieselbe Adresse zeigen, nicht kopiert.
In Laienbegriffen
1: Wenn es den folgenden Code gibt
[php]
$a="ABC";
$b=$a;
[/php]
Tatsächlich verweisen $a und $b zu diesem Zeitpunkt beide auf dieselbe Speicheradresse, anstatt dass $a und $b unterschiedliche Speicher belegen
2: Wenn Sie den folgenden Code zum obigen Code hinzufügen
[php]
$a="EFG";
[/php]
Da die Daten im Speicher, auf die $a und $b verweisen, neu geschrieben werden müssen, ermittelt und erstellt der Zend-Kern zu diesem Zeitpunkt automatisch eine Datenkopie von $a für $b und beantragt sie erneut ein Stück Erinnerung zum Speichern

Das Obige hat die Essenz von objektorientiertem PHP vorgestellt, einschließlich inhaltlicher Aspekte. Ich hoffe, es wird für Freunde hilfreich sein, 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