面向过程和面向对象:
什么是面向过程的编程思想 1、面向过程概述: 面向过程是一种编程思想、以过程(步骤)为中心、一种习惯 什么是面向对象的编程思想? 1、面向对象概述: 面向对象也是一种编程思想、以事物(对象)为中心、以功能来划分问题 面向过程,就是着重于做什么;面向对象,就是着重于谁去做
类和对象关系:
类是抽象的,几乎不占用内存,而对象是具体的,占用存储空间。 在现实中,先有对象,再有类。 在电脑中,先有类,再有对象。
类定义和成员属性、方法定义及操作:
类的定义 1、类的定义语法格式: 同函数一样,是代码的封装方式。 类的成员属性定义 1、成员属性介绍: 成员属性,类具有的公共的特征、特性 类中变量,就是类的成员属性 类的成员属性和普通变量的区别:权限修饰符 2、权限修饰符 成员属性必须要加权限修改符 类的成员方法定义 1、成员方法介绍: 成员方法:类的公共的的行为或动作; 有返回值和参数,默认访问权限是public 创建类的实例对象 1、实例化对象的含义: 对象实例化:从一个类上来生产对象过程,就是类的实例化 2、语法格式: 使用new关键字来创建对象。 对象属性操作 1、如何访问对象的属性和方法? 访问对象属性和方法,是通过"->"来访问的 对象方法的操作:方法定义、方法调用、传递参数、方法返回值。
对象方法:
1、伪变量$this的使用 1、伪变量$this的含义: $this表示当前对象引用(指针),如:$this->name = '张三' 创建对象后,存在。 2、举例说明 2、类常量的定义 1、类常量介绍: 类常量是一个定值,不能修改,也不能删除,与类相关与对象无关。对象共享、内存只有一份 2、类常量定义和调用格式 类常量没有权限,只有属性和方法才会有权限 使用const来定义类的常量(局部常量),只能在局部作用域下使用;define()定义常量是全局常量 3、构造方法 1、什么是构造方法: new对象,第1个调用的方法, __construct () 有参、无参:自定义,成员方法。作用:对象初始化、自动调用 4、析构方法 1、什么是析构方法 对象销毁前自动调用的方法,__destruct 无参、成员方法、作用垃圾回收 2、对象何时销毁 网页执行完毕时,对象会自动销毁; 使用unset()函数手动销毁对象
静态属性和静态方法:
static修饰属性,静态属性,static修饰方法,静态方法; 静态属性,方法:就是类的属性,方法,与类相关,与对象无关,通过"类名::"来调用; 内存中只有一份,被所有对象去共享; 静态属性或静态方法的好处:就是为了节省内存 静态属性和静态方法,都可以加权限控制符,而类常量没有权限。 $this当前对象的指针,self是指向当前类的指针; $this关键字用来调用对象的属性和方法; self用来调用类常量、静态属性、静态方法; $this关键字只能在成员方法中使用; self关键字可以在成员方法和静态方法中使用; 提示:对象可以调用:成员属性、成员方法、静态方法 提示:self可以调用:类常量、静态属性、静态方法、成员方法
OOP中内存的分配情况:
OOP中内存的分配情况 栈、堆内存空间、代码空间、静态空间区 值传递? 变量之间没有任何关系 值传递的数据类型有:字符串型、整型、浮点型、布尔型、数组型、NULL。 引用传递: 变量指向“同一个地址”,相互影响 引用传递的数据类型有:对象和资源。 对于海量数据,使用“引用传地址”,要比“传值”速度快。 其它类型变量使用引用传递: 如果其它类型变量使用引用传递,只需要在引用的变量前加“&”符号即可。
类的特性(继承、封装、多态):
类的三大特性:封装性、继承性、多态性; 类的封装性 封装性:将敏感的数据保护起来,不被外界访问;还可以理解为,将一个功能的方方面面,封装成一个整体,即类; 类的封装性通过访问权限修饰符来实现的; 实际中,属性基本都是私有的。通过公有的方法,对私有的属性进行赋值和取值。 public(默认)、protected、private 类的继承性 sub extends parent 父类:基础类(最顶层的类)、父类、上层类。 子类:最终类(最终的类)、子类、下层类。 类的继承是为了实现功能的升级和扩展。 功能的升级扩展:在子类进行完善(升级),在子类增加新功能(扩展)。 php只支持单继承。 self代表当前类,parent代表父类。存在所有方法 self和parent可以存在于所有方法(成员方法和静态方法)中。 parent(self)::类常量 | 静态属性 | 静态方法 | 成员方法 类的多态 类的多态是类的多种形态,方法重载(php不支持)或方法重写(子类重写)。 子类权限大于等于父类权限值(构造比较特殊、形参个数)
最终类(方法)和抽象类(方法)、接口:
最终类和最终方法 Final修饰的类,方法,就是最终类,方法; 最终类:该类只能实例化,不能被继承 最终方法:该方法可以被继承,但不能重写。 抽象类和抽象方法 abstract修饰的类,方法,就是抽象类,方法; 抽象类:该类不能直接实例化,必须先继承后再实例化。常用在基础类。 类中有抽象方法,该类必须是抽象类。 所有的抽象方法都必须重写(继承),少一个都不行,没有方法体,必须在子类重写后,再定义方法体。 不能是private,无法重写,抽象方法就是方法的命名规范、命名规则、方法大纲。 php7抽象类中,可以包含其它成员:常量、成员属性、成员方法、静态属性、静态方法。 接口 特殊的抽象类,多继承、interface\implement、方法默认public,abstract,不需要添加。
自动加载:
按需要加载类文件,而不是把所有类全部包含进来。命名格式:className.class.php spl_autoload_register()、__autoload() file_exists、require_once 何时调用? 使用new关键字创建不存在类的对象时, 当使用静态化方式访问一个不存在的类时, 当继承一个不存在的类时, 当实现一个不存在的接口时
对象克隆、对象遍历、常用魔术方法、面向对象设计模式:
对象克隆 创建新对象(引用地址不一致)有两种方式:a. 使用new关键字; b. 使用 clone 关键字 魔术方法__clone() 对象遍历: foreach既可以遍历数组元素,也可以遍历对象属性。 常用魔术方法 obj = new object() 1、__toString()=>obj 将对象转成字符串时,__toString()会自动调用。 2、__invoke()=>obj() 当把一个对象当成函数调用时,__invoke()会自动调用。 面向对象的设计模式 1、什么是对象设计模式?: 使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 2、常用的设计模式有哪些?: 单例设计模式:一个类只能创建一个实例对象,不管用什么办法都无法创建第2个对象; 工厂设计模式:生产不同类对象的工厂 3、单例设计模式的要求(三私一公) 一私:私有的静态的保存对象的属性。 一私:私有的构造方法,阻止类外new对象。 一私:私有的克隆方法,阻止类外clone对象。 一公:公共的静态的创建对象的方法。
工厂设计模式:
公共的静态的方法,传递不同的类名参数,返回不同类的对象; 在类的外部我们无法控制类的行为,但在类内部自己可以控制类的行为。 该方法功能:就是根据传递的不同参数,去创建不同的类实例;
重载:
1、什么是重载 PHP所提供的"重载"(overloading)是指动态地"创建"类属性和方法。 当调用当前环境下未定义或不可见的类属性或方法时,重载方法会被调用。 所有的重载方法都必须被声明为 public。 2、属性重载 (1)__get()魔术方法:读取不可访问属性的值时 (2)__set()魔术方法:给不可访问属性赋值时 (3)__isset()魔术方法:对不可访问属性调用 isset() 或 empty() (4)__unset()魔术方法:当对不可访问属性调用 unset() 3、方法重载 (1)__call()魔术方法:调用一个不可访问方法时 (2)__callStatic()魔术方法:静态方式调用一个不可访问方法
变量序列化:
1、什么是变量序列化 序列化是将变量转换为可保存或传输的字符串的过程; 反序列化就是在适当的时候把这个字符串再转化成原来的变量使用; 2、序列化函数serialize() $value可以是任何类型,除了资源外 3、反序列化函数unserialize() 从已存储的表示中创建 PHP 的值 4、对象反序列化 unserialize()函数会检查类中是否存在一个__wakeup()方法。 预先准备对象需要的资源。 __wakeup() 经常用在反序列化操作中,进行一些初始化操作,例如重新建立数据库连接,或执行其它初始化操作。
常用魔术常量:
__LINE__:当前行号 __FILE__:当前文件 __DIR__:当前目录 __FUNCTION__:当前函数 __CLASS__:当前类 __METHOD__:当前方法 __NAMESPACE__:当前命名空间