Ce qui suit est le texte de l'article :
1. Encapsulation
L'encapsulation consiste à encapsuler les données extraites et les opérations sur les données ensemble. . Protégées en interne, seules les opérations (méthodes) autorisées dans d'autres parties du programme peuvent opérer sur les données.
php fournit trois modificateurs de contrôle d'accès
public signifie global, accessible à l'intérieur de cette classe, en dehors de la classe, et
protected signifie protégé, seule cette classe ou sous-classe peut. access
private signifie privé et n'est accessible que dans cette classe
Les trois modificateurs ci-dessus peuvent modifier à la fois les méthodes et les attributs (variables). S'il n'y a pas de méthode, le modificateur d'accès est par défaut public, et les propriétés des membres doivent spécifier des modificateurs d'accès. En PHP4, il existe également cette façon d'écrire var $name, ce qui signifie des attributs publics. Cette façon d'écrire n'est pas recommandée.
Exemple :
<?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; ?>
public function setxxxx($val){ $this->xxxx=$val; } public function getxxxx(){ return $this->xxxx; }
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. Propriété d'héritage
Comme le montre l'exemple ci-dessus, lorsque plusieurs classes ont de nombreux attributs et méthodes communs,
<?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'; } } ?>
Comme on peut Comme le montre ce qui précède, l'héritage est une sous-classe (Subclass) via extends La classe parent
<?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 父类名{}
Détails :
2. en créant un objet sous-classe, sa classe parent ne sera pas automatiquement appelée par défaut Constructeur
<?php class A{ public $name='AAA'; } class B extends A{ public $age=30; } class C extends B{} $p=new C(); echo $p->name;//这里会输出AAA ?>
S'il n'y a pas de constructeur en B, le
class A{ public function __construct(){ echo 'A'; } } class B extends A{ public function __construct(){ echo 'B'; } } $b=new B();//这里会优先输出B中的构造方法,
5. la sous-classe (classe dérivée) est exactement la même que la méthode de la classe parent (publique, protégée),
class A{ public function test(){ echo 'a_test'; } } class B extends A{ public function __construct(){ //两种方法都行 A::test(); parent::test(); } } $b=new B();
Résumé :
<?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(); ?>
. Ce qui précède est le contenu (avancé) de l'apprentissage des trois principales fonctionnalités orientées objet de PHP (encapsulation, héritage, polymorphisme). Pour plus de contenu connexe, veuillez faire attention au site Web chinois de PHP (www.php. cn) !
父类private function cry(){} 子类 protected function cry(){} 可以正确执行