一、封装
封装就是有选择性的提供数据 通过访问修饰符来实现封装
1.1 构造方法
构造方法也叫构造函数,当实例化对象的时候自动执行。php中构造函数中不允许使用return。使用了也没效果。 语法:
function __construct() {
}
例:
<?php
class Student {
public function __construct() {
echo '这是构造方法<br/>';
}
}
$stu1 = new Student;
?>
效果: 利用构造方法进行私有变量的赋值访问:
<?php
class Student {
private $name;
private $sex;
// 初始化成员变量
public function __construct($name,$sex) {
$this->name=$name;
$this->sex=$sex;
}
// 显示信息
public function show() {
echo "姓名:{$this->name}<br/>";
echo "性别:{$this->sex}<br/>";
}
}
// 实例化
$stu = new Student('Jack', '男');
$stu->show();
?>
效果:
1.2 析构方法
当对象销毁的时候自动调用。(析构方法不能带参数) 语法:
function __destruct() {
}
代码:
<?php
class Student {
private $name;
// 初始化成员变量
public function __construct($name) {
$this->name=$name;
echo "{$name} 生成。<br/>";
}
// 显示信息
public function __destruct() {
echo "{$this->name} 销毁。<br/>";
}
}
// 实例化
$stu = new Student('Jack');
?>
效果:
1.3 计算机的内存管理
计算机内存管理方式: 1、先进先出: 先进先出的内存管理方式一般用在业务逻辑中,比如秒杀、购票等等。
2、先进后出。 先进后出是计算机的默认内存管理方式
二、继承
2.1 继承介绍
- 继承使得代码具有层次结构
- 子类继承了父类的属性和方法,实现了代码的可重用性
- 使用extends关键字实现继承
- 父类和子类是相对的
语法:
class 子类 extends 父类 {
}
例题:
<?php
// 父类
class Person {
public function show () {
echo '我是人类<br/>';
}
}
// 子类
class Student extends Person {
}
// 测试
$stu = new Student;
$stu->show();
效果: 执行过程:
- 在Student类中查找show(),如果找到就调用,找不到就到父类中查找
- 在Person类中查询show()
2.2 子类中调用父类成员
例:
<?php
// 父类
class Person {
public function show () {
echo '我是renlei<br/>';
}
}
// 子类
class Student extends Person {
public function test () {
/* 方法一:
$person = new Person();
$person->show();
*/
// 方法二:
$this->show();
}
}
// 测试
$stu = new Student;
$stu->test();
效果: 小结: 1、方法一:通过实例化父类调用父类的成员 2、方法二:通过$this关键字去调用父类的成员
2.3 访问修饰符protected
protected: 受保护的,在整个继承链上使用,访问。 例题一:
<?php
// 父类
class Person {
protected $num=10;
}
class Student extends Person {
public function getNum() {
echo $this->num;
}
}
// 测试
$obj = new Student();
$obj->getNum();
效果: 例题二:
<?php
// 父类
class Person {
public function getNum() {
echo $this->num;
}
}
class Student extends Person {
protected $num=10;
}
// 测试
$obj = new Student();
$obj->getNum();
效果:
2.4 继承中的构造函数
规则:如果子类有构造函数就调用子类的,如果子类没有就调用父类的构造数。
通过类名调用父类的构造函数:
类名 __construct()
例题:
<?php
// 父类
class Person {
public function __construct() {
echo '这是父类';
}
}
class Student extends Person {
public function __construct() {
echo '这是子类';
}
}
// 测试
new Student();
效果:
例题:
<?php
// 父类
class Person {
public function __construct() {
echo '这是父类';
}
}
class Student extends Person {
// public function __construct() {
// echo '这是子类';
// }
}
// 测试
new Student();
效果:
通过类名调用父类的构造函数:
类名 __construct()
:
<?php
// 父类
class Person {
public function __construct() {
echo '这是父类';
}
}
class Student extends Person {
public function __construct() {
Person::__construct(); // 调用父类的构造函数
echo '这是子类';
}
}
// 测试
new Student();
效果:
但是这种耦合性高,我们需要解耦,可以使用parent关键字代表这个子类的父类:
<?php
// 父类
class Person {
public function __construct() {
echo '这是父类';
}
}
class Student extends Person {
public function __construct() {
parent::__construct(); // 调用父类的构造函数
echo '这是子类';
}
}
// 测试
new Student();
效果:
例题:给父类传递参数:
<?php
// 父类
class Person {
protected $name;
protected $sex;
public function __construct($name, $sex) {
$this->name=$name;
$this->sex=$sex;
}
}
class Student extends Person {
private $score;
public function __construct($name, $sex, $score) {
parent::__construct($name, $sex); // 调用父类的构造函数并传递参数
$this->score=$score;
}
public function getInfo() {
echo "姓名: {$this->name}<br/>";
echo "性别: {$this->sex}<br/>";
echo "成绩: {$this->score}<br/>";
}
}
// 测试
$stu = new Student('Jack', '男', 18);
$stu->getInfo();
效果:
2.5 多重继承
PHP不允许多重继承,因为多重继承容易产生二义性。
2.6 $this详解
$this表示当前对象的引用。
常见问题FAQ
- 免费下载或者VIP会员专享资源能否直接商用?
- 本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
- 提示下载完但解压或打开不了?
- 找不到素材资源介绍文章里的示例图片?
- 模板不会安装或需要功能定制以及二次开发?
发表评论
还没有评论,快来抢沙发吧!