Heim  >  Artikel  >  Backend-Entwicklung  >  Vorläufiges Verständnis von PHP – Kapselung, Vererbung, polymorphe Funktionen

Vorläufiges Verständnis von PHP – Kapselung, Vererbung, polymorphe Funktionen

零下一度
零下一度Original
2017-06-23 14:42:111558Durchsuche

Im letzten Basisartikel hat K Sie in die Verwendung von Arrays und Strings in PHP eingeführt. Diesmal hat K beschlossen, es einmalig zu veröffentlichen und die objektorientierten Methoden in PHP mit Ihnen zu teilen. Drei Hauptmerkmale: Wissen in drei Aspekten: Kapselung, Vererbung und Polymorphismus.

1. Kapselung

In PHP kann die Kapselung in drei Unterteilungen zusammengefasst werden: Privatisierung. Insbesondere wird die Zugriffskontrolle durch die Privatisierung von Eigenschaften und Methoden in der Klasse, die keinen externen Zugriff erfordern, durch Zugriffsmodifikatoren erreicht.

Was ist also die Funktion der Kapselung ? Es gibt zwei Hauptfunktionen der Kapselung. Die eine ist die Methodenkapselung , die die Funktionen offenlegt, die für Benutzer wichtig sind, und die andere ist die Attributkapselung Kontrollieren Sie Benutzerdaten, um illegale Datenübertragungseinstellungen zu verhindern.

Wie wird also der Kapselungsvorgang implementiert?

Für die Methodenkapselung legen wir es fest, indem wir das private Schlüsselwort vor der Methode hinzufügen, also Privatisierung. Die Demo lautet wie folgt:

private function formatName(){} // 这个方法仅仅能在类内部使用$this调用 function showName(){             $this -> formatName();
         }

 Für die Attributkapselung können wir zwei Methoden verwenden, um sie zu implementieren.

Zuerst werden privatisierte Eigenschaften über die bereitgestellten Set/Get-Methoden festgelegt/gelesen. Die Demo lautet wie folgt:

private $age;         function setAge($age){             $this -> age = $age;
         }         function getAge(){             return $this -> age;
         }

 Die zweite wird durch eine magische Methode implementiert. Die Demo lautet wie folgt:

private $age;function __get($key){return $this -> $key;
}function __set($key,$value){$this -> $key = $value;
}$对象 -> age;  >>> 访问对象私有属性时,自动调用__get()魔术方法,并且将访问的属性名传给__get()方法;$对象 -> age = "11";  >>> 设置对象的私有属性时,自动调用__set()魔术方法,并且将设置的属性名以及属性值传给__set()方法;

Darüber hinaus umfassen die magischen Methoden im Zusammenhang mit der Kapselung hauptsächlich Folgendes:

  ① __set(): Wird beim Zuweisen von Werten zu privaten Klassenattributen automatisch aufgerufen. Übergeben Sie beim Aufruf zwei Parameter an das Objekt, die festgelegt werden müssen
② __get(): Beim Lesen privater Klassenattribute automatisch aufrufen, beim Aufruf einen Parameter an die Methode übergeben, den Attributnamen, der gelesen werden muss
③ __isset(): Wird automatisch aufgerufen, wenn isset( )-Funktion wird extern verwendet, um private Attribute zu erkennen.
  >>> Verwenden Sie isset() außerhalb der Klasse, um private Attribute zu erkennen, die standardmäßig nicht erkannt werden. Das ist falsch
  >>> Wir können also die Funktion __isset() verwenden, um das interne Erkennungsergebnis zurückzugeben, wenn sie automatisch aufgerufen wird.
function __isset($key){
return isset($this->$key);
}
Wenn isset ($object name->private attribute) für die externe Erkennung verwendet wird, wird das von der obigen __isset() zurückgegebene Ergebnis automatisch aufgerufen!
  ④ __unset(): Wird automatisch aufgerufen, wenn die Funktion unset() extern zum Löschen privater Attribute verwendet wird.
function __unset($key){
unset($this->$key);
}
Wenn ein Attribut extern mit unset($object name->private attribute) gelöscht wird, wird der Attributname automatisch an __unset() übergeben und dieser magischen Methode zur Verarbeitung übergeben.

2. Vererbung

In PHP kann Vererbung auch das Wort erweitert um zusammenzufassen. Extends wird für eine Unterklasse verwendet, um der Unterklasse zu ermöglichen, nicht private Eigenschaften und Methoden von der übergeordneten Klasse zu erben. Die Demo lautet wie folgt:

class Student extends Person{}

  但是,在使用继承时,需要注意以下几点:

  ① 子类只能继承父类的非私有属性。
  ② 子类继承父类后,相当于将父类的属性和方法copy到子类,可以直接使用$this调用。
  ③ PHP只能单继承,不支持一个类继承多个类,但是一个类可以进行多层继承。
   >>> class Person{}
   class Chengnian extends Person{}
   class Student extends Chengnian{}
  Student类就同时具有了Chengnian类和Person类的属性和方法

  下面给大家介绍一下关于方法重写(方法覆盖)的一些知识。

  方法覆盖是指子类对继承父类中重名方法的重写或覆盖,而它的实现需要满足两个条件,一是子类继承父类;二是子类重写父类已有方法。

  那么如果我想要在调用父类中的方法,应该怎么做?我们可以通过如下代码实现:

parent::方法名();

  同理,在子类继承父类时,首先也要调用父类的构造函数来赋值,实现代码如下:

function __construct($name,$age,$school){
    parent::__construct($name,$age);$this -> school = $school;
}// 其中name、age属性继承自父类,school属于子类

三、多态

  在PHP中,多态是最常用到的一种特性。所谓多态,是指同一个东西不同形态的展示。在PHP中,我们这样定义多态,一个类被多个子类继承,如果这个类的某个方法在多个子类中表现不同的功能,那么这种行为我们就称其为多态的实现。

  多态的实现必须要满足三个条件:一是子类继承父类,二是子类重写父类的方法,三是父类引用指向子类对象

  多态的实现K用一个小小的demo来给大家进行演示,demo如下:

    abstract class Person{abstract function say();
    }    class Chinese extends Person{ // 条件一:子类继承父类function say(){ // 条件二:子类重写父类方法echo "我说中文!<br>";
        }
    }class English extends Person{ //条件一:子类继承父类function say(){ // 条件二:子类重写父类方法echo "I speak English!<br>";            
        }
    }    
//    Person $c = new Chinese(); // 父类引用指向子类对象,PHP中此形式行不通
//    Person $e = new English();function func(Person $p){ //PHP中的类型约束只存在与函数的形参$p -> say();
    }
    func(new Chinese()); // 条件三:父类引用指向子类对象func(new English()); // 条件三:父类引用指向子类对象

 

好了,以上就是K给大家带来的关于PHP面向对象中封装、继承、多态这三个特性的初步理解,如果对你有帮助的话,可不要忘了给K点个赞哟~

 

Das obige ist der detaillierte Inhalt vonVorläufiges Verständnis von PHP – Kapselung, Vererbung, polymorphe Funktionen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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