Mit den Zugriffsmethoden von PHP5 können Sie den Zugriff auf Klassenmitglieder beschränken. Dies ist eine neue Funktion in PHP5, die jedoch bereits in vielen objektorientierten Sprachen vorhanden ist. Mit Zugriffsmethoden können Sie eine zuverlässige objektorientierte Anwendung entwickeln und wiederverwendbare objektorientierte Anwendungen erstellen.
Wie C++ und Java verfügt PHP über drei Zugriffsmethoden: öffentlich, privat und geschützt. Für die Zugriffsmethode eines Klassenmitglieds kann es sich um eine davon
handeln
Die Methode ist öffentlich. Sie können auch eine Zugriffsmethode für statische Mitglieder angeben, indem Sie die Zugriffsmethode vor dem Schlüsselwort static platzieren (z. B. public static), auf die
öffentliche Eigenschaften ohne Einschränkungen zugegriffen werden können . Sie können eine öffentliche Methode von überall in Ihrem Skript aufrufen, sodass sich Objekte wie schön strukturierte Arrays anfühlen.
Sie können den Wert nicht ändern oder lesen Eine private Eigenschaft außerhalb der Klassenmethode, in der sie sich befindet, kann auch nicht auf private Mitglieder in der übergeordneten Klasse
zugreifen Die Klasse kann auf private Mitglieder zugreifen. Die Methode „equals“ vergleicht zwei Widgets derselben Klasse, aber in diesem Beispiel hat die Methode „equals“ nur einen Namen
und Preis. Beachten Sie,
wie die Methode „equals“ auf die private Eigenschaft einer anderen Widget-Instanz zugreift
classWidget
{
privater $name;
privater $preis;
private $id;
öffentliche Funktion __construct($name, $price)
{
$this->name = $name;
$this->price = floatval($price);
$this->id = uniqid();
}
//prüft, ob zwei Widgets gleich sind. Prüft, ob zwei Widgets gleich sind
öffentliche Funktion equal($widget)
{
return(($this->name == $widget->name)AND
($this->price == $widget->price));
}
}
$w1 = neues Widget('Cog', 5.00);
$w2 = neues Widget('Cog', 5.00);
$w3 = neues Widget('Gear', 7.00);
//TRUE
if($w1->equals($w2))
{
print("w1 und w2 sind gleichn");
}
//FALSCH
if($w1->equals($w3))
{
print("w1 und w3 sind gleichn");
}
//FALSE, == schließt die ID in den Vergleich ein
if($w1 == $w2) //nicht gleich, da die IDs unterschiedlich sind
{
print("w1 und w2 sind gleichn");
}
?>
Wenn Sie neu in der objektorientierten Programmierung sind, fragen Sie sich vielleicht, welchen Zweck die Verwendung privater Member hat. Sie erinnern sich vielleicht an die Ideen der Kapselung und Kopplung, die wir am Anfang dieses Kapitels besprochen haben, um Daten zu kapseln Sie können innerhalb einer Klasse versteckt werden, ohne dass Code außerhalb der Klasse darauf zugreifen kann. Wenn Code außerhalb der Datenstruktur nicht direkt auf die internen Eigenschaften zugreifen kann, besteht natürlich keine implizite
Beziehung Private Eigenschaften können weiterhin von externem Code gemeinsam genutzt werden. Die Lösung besteht darin, ein Paar öffentlicher Methoden zu verwenden, eine davon ist get (den Wert der Eigenschaft abrufen) und die andere ist set (den Wert der Eigenschaft festlegen). Konstruktoren akzeptieren auch Eigenschaften Dies ermöglicht die Kommunikation zwischen Mitgliedern über eine schmale, gut qualifizierte Schnittstelle. Dies bietet auch die Möglichkeit, den an die Methode übergebenen Wert zu ändern. ))
Auf geschützte Mitglieder kann von allen Methoden in derselben Klasse zugegriffen werden, und in geerbten Klassen verstoßen sie gegen den Geist der Kapselung, da sie es Unterklassen ermöglichen, von der geschützten Methode abhängig zu sein Bei Verwendung der geschützten Methode muss die Struktur der übergeordneten Klasse klar sein.
Beachten Sie, dass Widget jetzt über eine geschützte Methode namens getName verfügt. Wenn eine Instanz von Widget versucht, die geschützte Methode aufzurufen, tritt ein Fehler auf: $w1->getName( ) erzeugt einen Fehler, aber die getName-Methode in der Unterklasse Thing kann diese geschützte Methode aufrufen. Um zu beweisen, dass die Widget::getName-Methode geschützt ist, scheint dies in tatsächlichen Situationen zu einfach zu sein Verständnis der inneren Struktur des Objekts.
<?php
classWidget
{
privater $name;
privater $preis;
private $id;
öffentliche Funktion __construct($name, $price)
{
$this->name = $name;
$this->price = floatval($price);
$this->id = uniqid();
}
//prüft, ob zwei Widgets gleich sind
öffentliche Funktion equal($widget)
{
return(($this->name == $widget->name)AND
($this->price == $widget->price));
}
geschützte Funktion getName()
{
return($this->name);
}
}
Klasse Thing erweitert Widget
{
private $color;
öffentliche Funktion setColor($color)
{
$this->color = $color;
}
öffentliche Funktion getColor()
{
return($this->color);
}
öffentliche Funktion getName()
{
return(parent::getName());
}
}
$w1 = neues Widget('Cog', 5.00);
$w2 = new Thing('Cog', 5.00);
$w2->setColor('Yellow');
//TRUE (immer noch!) Das Ergebnis ist immer noch wahr
if($w1->equals($w2))
{
print("w1 und w2 sind gleichn");
}
// Cog-Ausgabe Cog drucken
print($w2->getName());
?>
Eine Unterklasse kann die Art und Weise ändern, wie auf die Methode der übergeordneten Klasse zugegriffen wird. Es gibt jedoch immer noch einige Einschränkungen. Wenn Sie ein öffentliches Klassenmitglied überschreiben, muss es nach der Deklaration eines geschützten Elements öffentlich bleiben Als Mitglied kann es geschützt bleiben oder öffentlich werden. Wenn Sie ein Mitglied mit demselben Namen wie ein privates Mitglied der übergeordneten Klasse deklarieren, wird technisch gesehen einfach ein anderes Mitglied erstellt Sie können ein privates Mitglied nicht überschreiben.
Das Schlüsselwort Final ist eine weitere Möglichkeit, den Zugriff auf Mitgliedsmethoden einzuschränken.