지난 기본 기사에서 K는 PHP에서 배열과 문자열의 사용을 소개했습니다. 이번에 K는 이를 일회성 릴리스로 제공하고 PHP의 세 가지 주요 객체 지향 기능을 공유하기로 결정했습니다. 세 가지 측면: 캡슐화, 상속, 다형성.
PHP에서 캡슐화는 privatization이라는 세 가지 하위 섹션으로 요약될 수 있습니다. 특히 액세스 제어는 액세스 한정자를 통해 외부 액세스가 필요하지 않은 클래스의 속성과 메서드를 사유화하여 달성됩니다.
그럼 캡슐화의 기능은 무엇일까요? 캡슐화에는 두 가지 주요 기능이 있습니다. 하나는 사용자가 관심을 갖는 기능을 노출하고 다른 사용자는 사용할 수 없는 기능을 숨기는 속성 캡슐화이며, 다른 하나는 사용자의 데이터를 제어하고 불법적인 데이터 전송을 방지하는 것입니다. 설정.
그럼 캡슐화 연산은 어떻게 구현되나요?메서드의 캡슐화를 위해 메쏘드 앞에
private 키워드를 추가하여 설정합니다. 즉, privatization입니다. 데모는 다음과 같습니다:
private function formatName(){} // 这个方法仅仅能在类内部使用$this调用 function showName(){ $this -> formatName(); }
먼저, 자체적으로 제공하는 set/get 메소드를 통해
사유화된 속성을 설정/읽기합니다. 데모는 다음과 같습니다:
private $age; function setAge($age){ $this -> age = $age; } function getAge(){ return $this -> age; }
매직 메소드를 통해 구현입니다. 데모는 다음과 같습니다.
private $age;function __get($key){return $this -> $key; }function __set($key,$value){$this -> $key = $value; }$对象 -> age; >>> 访问对象私有属性时,自动调用__get()魔术方法,并且将访问的属性名传给__get()方法;$对象 -> age = "11"; >>> 设置对象的私有属性时,自动调用__set()魔术方法,并且将设置的属性名以及属性值传给__set()方法;
① __set(): 클래스의 Private 속성에 값을 할당할 때 자동으로 호출되며, 호출 시 객체에 두 개의 매개변수 전달, 설정해야 하는 속성 이름과 속성 값
② __get(): 클래스의 개인 속성을 읽을 때 자동으로 호출됩니다. 호출 시 매개변수를 메소드에 전달합니다. 읽어야 할 속성 이름
3 __isset(): 외부에서 isset 사용() 함수는 비공개 속성을 감지할 때 자동으로 호출됩니다.
>>> 기본적으로 감지되지 않는 개인 속성을 감지하려면 클래스 외부에서 isset()을 사용하세요. 그것은 거짓입니다
>>>그래서 자동 호출 시 내부 탐지 결과를 반환하는 __isset() 함수를 사용할 수 있습니다.
function __isset($key){
return isset($this->$key);
}
감지를 위해 외부적으로 isset($object name->private property)를 사용하는 경우, 위의 __isset()에 의해 반환된 결과를 자동으로 호출합니다!
④ __unset(): 비공개 속성을 삭제하기 위해 외부에서 unset() 함수를 사용할 때 자동으로 호출됩니다.
함수 __unset($key){
unset($this->$key);
}
unset($object name->private attribute)을 사용하여 외부에서 속성을 삭제하는 경우, 자동으로 속성 이름을 __unset()에 전달하고 이 매직 메서드가 이를 처리하도록 합니다.
extends라는 단어로 요약할 수도 있습니다. Extends는 하위 클래스가 상위 클래스로부터 비공개 속성과 메서드를 상속받을 수 있도록 하기 위해 하위 클래스에서 사용됩니다. 데모는 다음과 같습니다:
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点个赞哟~
위 내용은 PHP에 대한 사전 이해 - 캡슐화, 상속, 다형성 기능의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!