Maison > développement back-end > tutoriel php > Quelles sont les caractéristiques du php orienté objet ? Introduction aux fonctionnalités orientées objet de PHP (code)

Quelles sont les caractéristiques du php orienté objet ? Introduction aux fonctionnalités orientées objet de PHP (code)

不言
Libérer: 2023-04-03 11:48:01
original
2787 Les gens l'ont consulté

Le PHP orienté objet mentionné ici devrait être appelé programmation orientée objet PHP pour être précis. Les trois caractéristiques de base de la programmation orientée objet PHP sont l'encapsulation, l'héritage et le polymorphisme. PHP séparément. Trois caractéristiques majeures.

1. Trois fonctionnalités majeures de PHP orienté objet :
1. Encapsulation :
L'encapsulation consiste à encapsuler des données abstraites et des opérations sur les données, et les données sont protégées en interne. certaines parties du programme ne peuvent opérer sur les données que via des opérations autorisées (méthodes membres).

Affectation des caractères de contrôle d'accès value.png

2 Héritage :
Le soi-disant héritage est qu'une sous-classe étend la classe parent à la. classe parent Certaines propriétés (publiques/protégées) et méthodes (publiques/protégées) sont héritées. Le privé ne peut pas être hérité.

  作用:增加代码复用性,管理代码成本低。
 
  基本语法:
  class 类名 extends 父类名 {
        //需要的非私有属性和方法
  }
Copier après la connexion

Inherit.png

<?php
    
    //父类
    Class Student {
        public $name;
        protected $age;
        protected $grade;

        // public __construct() {

        // }

        public function showInfo() {
            echo $this -> name."<br/>".$this -> age;
        }
    }

    /**
    * 小学生
    */
    class Pupil extends Student
    {
        public function test() {
            echo "<br/>小学生在考试。。。";
        }
    }

    /**
    * 大学生
    */
    class Graduate extends Student
    {
        public function test() {
            echo "<br/>大学生在考试。。。";
        } 
    }

    $stu1 = new Pupil();
    $stu1 -> name = "lizzy";
    $stu1 -> test();
    $stu1 -> showInfo();

    $stu2 = new Graduate();
    $stu2 -> name = "zxm";
    $stu2 -> test();
    $stu2 -> showInfo();
?>
Copier après la connexion

Remarque :
(1) les propriétés et méthodes protégées sont protégées et ne peuvent pas être directement utilisées dans sous-classes Pour appeler, l'accès à la méthode doit être défini dans la sous-classe.

Class ParentClass {
    public $name = &#39;lizzy&#39;;
    protected $age = 24;
    private $sex = "女";

    public function test1() {
        echo "<br/>展示public方法";
    }

    protected function test2() {
        echo "<br/>展示protected方法";
    }

    private function test3() {
        echo "<br/>展示private方法";
    }
}

Class SubClass extends ParentClass {
    function show() {
        echo "age=".$this->age;
        // echo "sex=".$this->sex;//是不能继承下来的
        $this -> test2();
    }
}

$sub1 = new SubClass();
$sub1 -> show();
$sub1 -> test1();
Copier après la connexion

(2) Si vous souhaitez que la sous-classe appelle le constructeur de la classe parent ou d'autres méthodes (publiques/protégées), vous pouvez utiliser class name::method name ou parent::method name;

Class A {
    public $n1=90;

    public function __construct() {
        echo "A的构造方法";
    }
}

Class B extends A {
    function __construct() {
        echo "B的构造方法";
        //调用父类的两种方法
        // A::__construct();
        parent::__construct();
    }
}
$b = new B();
Copier après la connexion

(3) Lorsqu'une méthode de sous-classe est complètement cohérente avec la méthode de la classe parent (protégée/publique), nous l'appelons écrasement de méthode (écrasement).

3. Polymorphisme :
La "surcharge" est une manifestation du polymorphisme de classe
Le concept de surcharge : le nom de la fonction est le même, mais le nombre ou les types de paramètres de la fonction sont différents, pour appeler le même nom de fonction, mais différentes fonctions peuvent être distinguées.

Fonction magique __call, mais son utilisation n'est pas recommandée ; si un objet appelle une méthode et que la méthode n'existe pas, le système appellera automatiquement __call.

<?php

    Class A {

        public function test1($p) {
            echo "接收一个参数<br/>";
        }

        public function test2($p) {
            echo "接收两个参数<br/>";
        }

        //提供__call 它一个对象调用某个方法,而该方法不存在,则系统会自动调用__call
        function __call($method,$p) {
            if ($method == "test") {
                if (count($p) == 1) {
                    $this -> test1($p);
                } elseif (count($p) == 2) {
                    $this -> test2($p);
                }
            }
        }
    }

    $a = new A();
    $a -> test(1);
    $a -> test(21,43)
?>
Copier après la connexion

Constantes magiques communes : deux traits de soulignement LINE deux traits de soulignement ; le nombre actuel de lignes
deux traits de soulignement FILE deux traits de soulignement ; le chemin absolu du fichier actuel

méthode Override ; :
1. Lorsqu'une classe parent sait que toutes les sous-classes ont une méthode, mais que la classe parent ne sait pas comment écrire la méthode, elle peut laisser la sous-classe remplacer cette méthode.
Utilisez comme suit :

<?php

    Class Animal {
        function cry() {
            echo "不知道怎么叫";
        }
    }

    //重写
    Class Dog extends Animal {
        function cry() {
            echo "小狗汪汪叫";
        }
    }

    //重写
    Class Pig extends Animal {
        function cry() {
            echo "小猪哼哼叫";
        }
    }

    $dog = new Dog();
    $dog -> cry();
    $pig = new Pig();
    $pig -> cry();

?>
Copier après la connexion

Détails de la réécriture de méthode :
1. Le nom de la fonction et le nombre de paramètres de la sous-classe réécrite doivent être cohérents avec ceux de la classe parent mais les noms ; des paramètres ne doivent pas nécessairement être les mêmes.
2. Si la sous-classe veut appeler une méthode de la classe parent (publique/protégée), vous pouvez utiliser parent::method name(); ou parent class name::method name(); selon la situation.
3. Lors de l'implémentation des remplacements de méthode, les modificateurs d'accès peuvent être différents, mais ils doivent satisfaire la portée d'accès de la sous-classe >= la portée d'accès de la classe parent.

Le polymorphisme se reflète dans :
Lorsque la sous-classe ne remplace pas la méthode de la classe parent, la sous-classe appelle la classe parent. Lorsque la sous-classe remplace la méthode de la classe parent, elle appelle sa propre méthode. .

Recommandations associées :

Tutoriel d'introduction PHP base zéro

Parlez de ma compréhension de l'orientation objet en php

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
m php
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal