Das Folgende ist der Text des Artikels:
1. Kapselung
Kapselung dient dazu, die extrahierten Daten und die Operationen an den Daten zusammen zu kapseln . Intern geschützt, können nur autorisierte Vorgänge (Methoden) in anderen Teilen des Programms mit den Daten arbeiten.
php bietet drei Zugriffskontrollmodifikatoren.
öffentlich bedeutet global, zugänglich innerhalb dieser Klasse, außerhalb der Klasse und Unterklassen.
geschützt bedeutet geschützt, nur diese Klasse oder Unterklasse kann Zugriff
private bedeutet privat und kann nur innerhalb dieser Klasse aufgerufen werden
Die oben genannten drei Modifikatoren können sowohl Methoden als auch Attribute (Variablen) ändern. Wenn keine Methode vorhanden ist, ist der Zugriffsmodifikator standardmäßig öffentlich. und Mitgliedseigenschaften müssen Zugriffsmodifikatoren angeben. In PHP4 gibt es auch diese Schreibweise für var $name, was bedeutet, dass öffentliche Attribute nicht empfohlen werden:
🎜>
<?php class Person{ public $name; protected $age; private $salary; function __construct($name,$age,$salary){ $this->name=$name; $this->age=$age; $this->salary=$salary; } public function showinfo(){ //这表示三个修饰符都可以在本类内部使用 echo $this->name."||".$this->age."||".$this->salary; } } $p1=new Person('张三',20,3000); //这里属于类外部,那么如果用下面的方法访问age和salary都会报错 // echo $p1->age; echo$p1->salary; ?>
Was soll ich also tun, wenn ich extern auf geschützte und private Elemente und Methoden zugreifen möchte?
Set und Get Here dienen nur der einfacheren Identifizierung und sind nicht notwendig.
public function setxxxx($val){ $this->xxxx=$val; } public function getxxxx(){ return $this->xxxx; }
Extern können Sie echo $p1->getsalary();
public function getsalary(){ return $this->salary; //扩展:这里可以调用一些方法,如判断用户名等,正确才给访问 }
<?php class testa{ protected $name; //使用__set()来管理所有属性 public function __set($pro_name,$pro_val){ //上面$pro_name和$pro_val可自定义 //下面$this->pro_name为既定,不可更改 $this->pro_name=$pro_val; } //使用__get()来获取所有属性值 public function __get($pro_name){ if(isset($pro_name)){ return $this->pro_name; } else { return null; } } } $n1=new testa(); //正常情况,类外部是不能访问protected属性的, 但是用了上面的方法就可以对它们进行操作 $n1->name='小三'; echo $n1->name; ?>
2. Vererbungseigenschaft
Wie aus dem obigen Beispiel ersichtlich ist, wenn mehrere Klassen vorhanden sind viele gemeinsame Attribute und Methoden,
<?php class Pupil{ public $name; protected $age; public function getinfo(){ echo $this->name.'||'.$this->age; } public function testing(){ echo 'this is pupil'; } } class Graduate{ public $name; protected $age; public function getinfo(){ echo $this->name.'||'.$this->age; } public function testing(){ echo 'this is Graduate'; } } ?>
Wie möglich Wie aus dem Obigen hervorgeht, handelt es sich bei der Vererbung um eine Unterklasse (Subclass) durch Erweiterungen. Die übergeordnete Klasse
<?php class Students{ public $name; public $age; public function __construct($name,$age){ $this->name=$name; $this->age=$age; } public function showinfo(){ echo $this->name.'||'.$this->age; } } class Pupil extends Students{ function testing(){ echo 'Pupil '.$this->name.' is testing'; } } class Graduate extends Students{ function testing(){ echo 'Graduate '.$this->name.' is testing'; } } $stu1=new Pupil('张三',20); $stu1->showinfo(); echo '<br/>'; $stu1->testing(); ?>
class 父类名{} class 子类名 extends 父类名{}
Details:
2 Beim Erstellen eines Unterklassenobjekts wird seine übergeordnete Klasse standardmäßig nicht automatisch aufgerufen. Konstruktor
<?php class A{ public $name='AAA'; } class B extends A{ public $age=30; } class C extends B{} $p=new C(); echo $p->name;//这里会输出AAA ?>
Wenn in B kein Konstruktor vorhanden ist, wird der
class A{ public function __construct(){ echo 'A'; } } class B extends A{ public function __construct(){ echo 'B'; } } $b=new B();//这里会优先输出B中的构造方法,
5 Wenn die Methode von a Die Unterklasse (abgeleitete Klasse) ist genau die gleiche wie die Methode der übergeordneten Klasse (öffentlich, geschützt).
class A{ public function test(){ echo 'a_test'; } } class B extends A{ public function __construct(){ //两种方法都行 A::test(); parent::test(); } } $b=new B();
Zusammenfassung:
<?php class Animal{ public $name; public $price; function cry(){ echo 'i don\'t know'; } } class Dog extends Animal{ //覆盖、重写 function cry(){ echo 'Wang Wang!'; Animal::cry();//这里不会报错,能正确执行父类的cry(); } } $dog1=new Dog(); $dog1->cry(); ?>
Das Obige ist der (fortgeschrittene) Inhalt des Erlernens der drei wichtigsten objektorientierten Funktionen von PHP (Kapselung, Vererbung, Polymorphismus). Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.cn).
父类private function cry(){} 子类 protected function cry(){} 可以正确执行