第1天:面向对象(一):类与对象、构造函数、析构函数、魔术方法

第 1 章 类与对象

1.1 先看一个问题-引出面向对象编程


image.png

如果我们没有学习OOP,我们的编程思路是怎样的? 最基本的体验案例.


image.png

1.2 php支持面向对象编程


image.png

说明:目前主流的编程语言都是面向对象的方式来开发,php, java, python, c#
php架构师 [php + python + Linux(centos, redhad,ubuntu) [unix solaris, freebsd..]]

1.3 类与对象的关系


image.png

代码:


image.png

image.png

代码说明:

image.png

1.4 类与对象区别


image.png

1.5 如何讲解一个完整的类定义


image.png

说明一个最简单的类的定义如下:

class  类名{
成员属性(变量);
}

注意: (1) class 是一个关键字 (2) 成员属性又叫成员变量,他是定义在对象中的(3) 一个类可以包含有属于自己的[常量],[变量](称为“属性”)以及函数(称为“方法”)。

1.6 成员属性

介绍: 成员属性又叫成员变量,是在类中定义的,比如: 成员属性是类的一个组成部分,一般是基本数据类型(整数,字符串),也可是复合类型(对象、数组) , 资源类型。比如我们前面定义猫类的 public $age 就是成员属性。
成员属性前面有访问修饰符(public / protected / private) 三种. 关于这三种访问修饰符,我们在后面有专门的章节讲解。我这里简单的说一句:访问修饰符就是控制我们的成员变量(属性)访问的访问 。public 就是可以在类的内部和外部使用个变量.

举例说明:


image.png

1.7 如何创建对象
l 基本语法如下:


image.png

说明

(1) new 是一个关键字,表示创建一个新的对象实例
(2) 如果我们使用的是默认构造方法,那么 new 类名() 和 new 类名 是效果一样.
l 对象属性访问的说明


image.png

代码说明 类名的问题

(1) 类名不区分大小写,类名是帕斯卡法命名

image.png

image.png

1.8 对象的传递方式(重点,难点)


image.png

结论: PHP当 $b=$a 也是值传递,但是这个值是对象的引用(可以理解对象标识符),即每个包含对象的变量都持有对象的引用(reference),而不是整个对象的拷贝。

1.9 对对象传递方式的深入分析


image.png

分析图:


image.png

1.10 成员方法
l 基本介绍: 在类中,我们可以定义方法(函数), 请注意,这里有人叫成员函数,有人叫成员方法,都是一样一样的。
l 基本语法是:


image.png

说明
(1) 成员方法前有一个访问修饰符(public / protected /private ), 默认是public
(2) 成员方法的调用形式是 $对象名->成员方法名(实参1.....);
(3) 成员方法的调用和运行机制和前面讲的函数是一样的。
l 代码说明


image.png

image.png

image.png

l 成员方法的细节说明


image.png

l 成员方法的练习题:


image.png

l 类定义的进一步完善
image.png

l 类与对象的练习题


image.png

第 2 章 构造方法

2.1 基本概念

PHP 5 允行开发者在一个类中定义一个方法作为构造函数。具有构造函数的类会在每次创建新对象时先调用此方法,所以非常适合在使用对象之前做一些初始化工作.

2.2 看一个具体的开发需求


image.png

2.3 构造方法的快速入门
我们以完成上面的需求来写代码-基本案例:


image.png

2.4 构造函数的细节说明
  1. 构造函数的基本定义


    image.png
  2. 构造方法是类的一种特殊的方法,它的主要作用是完成对新对象的初始化, 我们说明一下,构造方法是对对象的初始化。

  3. 没有返回值

  4. 在创建一个类的新对象时,系统会自动的调用该类的构造方法完成对新对象的****初始化****。

  5. 关于构造方法名字的说明


    image.png

代码说明:

image.png

2.5 默认构造函数

l 基本说明


image.png

注意:


image.png

2.6 this的再说明

image.png

l 代码说明


image.png

image.png

2.7 $this的注意事项


image.png

2.8 关于构造方法的小结


image.png

学习了构造方法后,我们的类定义可以进一步完善了


image.png

第 3 章 析构函数
3.1 基本介绍
PHP 5 引入了析构函数的概念,这类似于其它面向对象的语言,如 C++。析构函数会在到某个对象的所有引用都被删除或者当对象被显式销毁时执行。
析构函数的主要作用是,在对象销毁前,释放对象的相关资源,(比如数据库链接,或是是打开的文件引用等等。)

3.2 基本语法是

public  function   __destruct(){  
//析构函数的代码块[释放资源];
}

3.3 快速入门案例


image.png

image.png

对应的分析图:


image.png

3.4 关于析构函数的几点说明

image.png

3.5 析构函数的最佳实践
image.png

说明:
(1) 使用显示销毁,可以及时销毁我们的占用资源比较大的对象
(2) 在析构函数中,还可以及时的释放对象创建的资源.
代码说明:
image.png

image.png

image.png

image.png

3.6 垃圾回收机制


image.png

垃圾回收机制的说明:


image.png

说明
(1) php5.3使用的简单的垃圾回收机制,使用引用计数的方式来控制.

(2) php5.3 后对垃圾回收机制做了完善,增加了对引用环处理。
3.7 小结:


image.png

3.8 类的定义进一步完善
image.png

第 4章 魔术方法
4.1 魔术方法的基本介绍

image.png

说明
(1) 魔术方法都是在满足某个条件时,由系统自动调用.
(2) 魔术方法的名字,都是以 两个 _ 开头的,因此我们在写自己函数时,不要以__ 开头.
4.2 介绍一下访问修饰符(public / protected / private)
说明一下,因为要系统的讲解 访问修饰符,需要用的继承,所以这里我们做一个初步介绍,后面我们会详解.
image.png

案例说明:
image.png

image.png

小结
(1) 类的成员属性的访问修饰符三种 (public / protected / private)
(2) public 的成员属性可以在类的外部直接使用,protected 和 private 不可以直接使用
(3) 如果要使用private 和 protected 可以编写一个public 的成员函数来使用

4.3 魔术方法的__get 和 __set
l 基本的说明

image.png

l 看具体需求
需求:如果对象有一个成员变量是private/protected的,我希望在在类的外部通过$对象名->变量名的方式来赋值和取值,怎么办?
代码说明:
image.png

注:****property_exists****(对象,属性)----检查对象或类是否具有该属性

image.png

image.png

l 课后练习题
image.png

4.4 魔术方法的__isset 和 __unset的使用
l 概述:
如果我们对不可访问的属性(比如属性是protected 或者 private 或是不存在), 进行了 isset() / empty 操作时,那么 __isset就会被调用.
如果我们对不可访问的属性(比如属性是protected 或者 private 或是不存在), 进行了 unset() 操作时,那么 __unset就会被调用.

l 看一个具体的需求
需求: 如果我们希望在类的外部,通过 isset(对象名->变量名)来判断或销毁对象的某个成员变量,怎么办?

代码说明:

image.png

image.png

image.png

l 小练习
image.png

4.5 魔术方法的__toString
基本介绍: __toStriing, 将对象以字符串的形式输出.
代码说明:
image.png

l 小练习
image.png

1.6 魔术方法的__clone
介绍: __clone,如果定义了 __clone()方法,则新创建的对象(复制生成的对象)中的 __clone()方法会被调用
代码说明(这里我们讲解来的clone的基本概念):
image.png

image.png

image.png

l 看看__clone 魔术方法的使用
image.png

1.7 魔术方法__call
l 基本介绍:
__call,在对象调用一个不可访问方法时(比如函数private/protected/或者不存在),__call() 会被调用。
l 看一段代码:
image.png

image.png

说明:
(1) 当我们调用一个不可访问的方法(成员方法), 就会自动的调用__call方法。
(2) 我们可以在 __call 方法中,去间接的调用用户希望调用的其它方法,比如getSum...

l 小练习


image.png

image.png

image.png

image.png

4.8 类的自动加载

l 先看一个问题:

image.png

l 使用传统的方式
代码:
image.png

l 对代码的优化处理
image.png

image.png

4.9 类的自动加载--高级方式
介绍: spl_autoload_register— 注册__autoload()函数
举例说明:
image.png

你可能感兴趣的:(第1天:面向对象(一):类与对象、构造函数、析构函数、魔术方法)