分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 运营维护

PHP中的封装和继承

发布时间:2023-09-06 01:21责任编辑:沈小雨关键词:PHP
1. 封装

1.1什么是封装?

通过访问修饰符,将类中的属性和方法进行私有化处理,并提供唯一的设置和读取的

set/get方法,以实现访问控制。这个过程称为封装。

注意:是实现访问控制,而不是拒绝访问。也就是说,单纯的私有化属性并不是封装,必须提供对应的set/get方法,控制用户使用我们提供的方法进行操作。

1.2封装有什么作用?

① 使用者只需要关心类能够提供哪些功能,而不需要关心这些功能的实现细节。(方法的封装)

② 对用户的数据进行控制,防止设置不合法的数据,并控制返回给用户的数据。(属性的封装)

1.3如何实现封装?

① 方法的封装

     对于一些只需要在类内部使用,而不需要对外提供功能的函数,我们可以使用private关键字进行私有化处理。

 ?????????private function formaName(){} ?????????function showName(){ ?????????????$this->formaName();// 私有化的方法,只能在类内部使用$this调用 ?????????}

② 属性的封装 + set/get方法

 ?????????private $age; ?????????function setAge($age){ ?????????????$this->age = $age; ?????????} ?????????function getAge(){ ?????????????return $this->age; ?????????} 使用属性:$对象名->setAge(27); ?????????echo $对象名->getAge();
 

③ 属性的封装 + 魔术方法

 ?????????private $age; ?????????function __set($key,&value){ ????????????$this->$key = $value; ?????????} ?????????function __get($key){ ?????????????return $this->$key; ?????????} ?使用属性:$对象名->age=12; // 设置私有属性时,将自动调用__set() ?????????$对象名->age; // 读取私有属性时,将自动调用__get()

1.4封装中常用的魔术方法

 

__set($key,$value):设置类中非公开属性时,将自动调用魔术方法。并且传递两个参数,$key--设置的属性名 $value--设置的属性值,没有返回值。

__get($key):读取类中非公开属性时,将自动调用魔术方法。并且传递一个参数,$key--读取的属性名,返回值:想要显示的属性值。

__isset($key):在类外部使用isset()检测非公开属性时自动调用。

   >>> 类外部使用isset()检测非公开属性,摸人家呢不带,返回false;

   >>> 所以,我们可以使用__isset(),在内部将检测结果返回。

 ?????????function __isset($key){ ?????????????return isset($this->$key); ?????????}

__unset($key):在类外部使用unset()删除私有属性时,自动调用。

 ???????function __unset($key){ ???????????unset($this->$key); ???????}
2. 继承

2.1什么叫继承?

 子类继承父类,子类就拥有父类中非私有的属性和方法。

2.2如何实现继承?

 给子类使用extends关键字,可以让子类继承父类。

class Student extends Person()
 

2.3继承的注意事项

 ① 子类只能继承父类的私有属性,不能继承private属性。

 ② 子类继承父类后,相当于把父类非私有属性和方法,直接copy到子类。可以直接使用$this->调用,与子类自身的属性和方法没有区别!

 ③ PHP只支持单继承,也就是一个类只能有一个父类。但是,PHP中可以多层继承,比如:

 ????????class Person{} ????????class Student extends Person{} ????????class GoodStudent extends Student{} ????????// GoodStudent继承了Student类,也就拥有了Student类和Person类的所有非私有属性和方法。

2.4方法重写(方法覆盖)

条件① 子类继承父类

条件② 子类重写父类已有的同名方法
 

符合上述两个条件,称为方法覆盖,也叫方法重写。覆盖之后,子类调用方法,将直接调用子类自身重写之后的方法。

如果,子类重写了父类方法,那么在子类中如何调用父类的同名方法?

 ????Person::方法名(); // 使用父类名调用 ????parent::方法名(); // 使用parent关键字代指父类名

所以,当子类继承父类以后,第一步就是需要在子类中,重写父类的构造函数。而在子类的构造函数中,第一步需要将父类的构造函数进行调用赋值。

 ????????function __construct($name,$age,$school){ ???????  parent::__construct($name,$age); ???????  $this->school = $school; ????  }

PHP中的封装和继承

原文地址:http://www.cnblogs.com/sin0/p/7750387.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved