面向对象
Posted 白云千载空悠悠
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面向对象相关的知识,希望对你有一定的参考价值。
1.类和对象的定义
类: 属性与方法的集合
对象:类实例化的结果
class是定义类的关键字
new是实例化类的关键字
类中的元素有:成员属性、成员方法、静态属性、静态方法、常量。
三大特性:封装 继承 多态
2.访问修饰符
public(公共的权限):在任何地方都可以访问,主要包括:类内、类外、子类中,都可以访问
protected(受保护的权限):只能在本类和子类中可以被访问,在类外无权访问
private(私有的权限):只能在本类中被访问,在类外和子类中都无权访问
注意:成员属性不能省略权限控制符
3.类常量
常量是一个值永远不变的量,常量不能修改和删除
使用const来定义类常量
一个只会有一份常量,不可能有多份常量。节省内存空间
类常量不能加权限控制符
调用类常量的方式:ClassName::常量名称
4.静态属性和静态方法
static关键字修饰的属性,就是静态属性
static关键字修饰的属性,就是静态方法
静态属性和静态方法,是与类相关的,与对象无关
静态属性和静态方法,可以节省内存空间,不会因为对象的增加而增加。
调用静态属性/方法的方式:ClassName::常量名称
5.self关键字
$this代表当前对象;self代表当前类。
$this和self都只能在类中的方法中使用
$this用来调用对象属性和方法
Self用来调用类的属性(静态属性)、类的方法(静态方法)、类的常量
6.构造方法
定义:当创建对象时,第1个自动调用的方法,就是构造方法
名称:__construct();
构造方法一般都是自动调用,不需要手动调用
构造方法只能是成员方法,不能是静态方法
7.析构方法
定义:当一个对象销毁前,自动调用的方法,就是析构方法
名称:__destruct()
析构方法一定没有参数,也没有返回值
作用:在对象销毁前,做一些清理工作、处理工作、额外工作
大部分情况下,析构方法几乎不用。因为网页执行完毕,网页中相关的变量都全部销毁
8.类的继承性
基础类(基类):最顶层的类,应该是所有子类中共有的内容。
继承:就是将父类的所有东西全部拿过来,一个不剩下的
单继承:只能从一个父类来继承。如:php、Java、VB等。
构造方法和析构方法的继承
子类继承了父类,父类中所有内容都会被继承,包括构造方法和析构方法
9.parent关键字与self关键字的区别
Self关键字总是代表本类;parent代表父类
Self只能在本类中来使用;parent只能在子类中来使用
Self可以调用本类的内容:类常量、静态属性、静态方法、成员方法
Parent可以调用父类的内容:类常量、静态属性、静态方法、成员方法
Self和parent不能调用成员属性
10.类的多态性
类的多态,主要指方法重载和方法重写
方法重载:在一个类中,定义两个同名方法。PHP不支持函数重载或方法重载
方法重写:就是父类中有的方法,在子类中用同样的名称,再定义一次
方法重写的目的,主要是实现项目功能的升级
构造方法重写,两个构造方法的参数个数,可以不一致。但是,其它方法重写时,参数个数必须一致。
11.最终类和最终方法
Final关键字修饰的类,就是最终类
Final关键字修饰的方法,就是最终方法
最终类:该类不需要继承,直接实例化即可。如:数据库操作类
最终方法:该方法十分完善,不需要重写,只能继承使用
最终方法只能继承,不能重写。最终方法和最终类不能同时使用。
12.抽象类和抽象方法
abstract关键字修饰的类,就是抽象类
abstract关键字修饰的方法,就是抽象方法
该类只能被继承,不能直接实例化。常用于基础类
所有的抽象方法,在子类中必须要被重写
13.接口
使用interface关键字,来定义一个接口,接口也是一个特殊类
接口可以继承接口;抽象类也可以继承抽象类;类也可以继承类
接口中的方法默认都是抽象方法,不需要再加abstract关键字。
接口中的方法也可以是成员方法,也可以是静态方法
创建一个子类,来重写接口中的所有抽象方法
接口中的常量,只能继承,不能重写。
接口中的所有方法,权限必须是public权限
14.常规的自动加载类函数__autoload($className)
自定义自动加载类文件函数(spl_autoload_register)
类的自动加载,是使用系统的内置函数__autoload()来实现的
函数名称__autoload()是固定的
__autoload($className)函数是自动调用的
__autoload()函数,只能实现简单的类文件的加载;而spl_autoload_register()可以实现复杂类文件加载
描述:注册__autoload()函数,注册多个__autoload()函数的队列
语法:bool spl_autoload_register ([ callback $autoload_function ] )
spl_autload_register()函数的参数可以是一个字符串的函数名,也可以是一个匿名函数
15.对象克隆
克隆对象,使用clone关键字来实现。可以产生两个真正的对象。
当对象克隆完成后时,如果存在克隆方法,就会自动调用。
克隆方法的作用:可以在对象克隆完成后,添加对象属性、修改对象属性的值。
大部分魔术方法都是自动调用,不需要手动调用
16.常用的魔术方法
1、__toString()
__toString()当将对象转成字符串,自动调用的方法
2.__invoke()
描述:当将一个对象,当成函数调用时,__invoke()会自动调用。
17.单例模式
单例模式设计要求(三私一公)
一私:私有的静态的保存当前对象的属性
一私:私有的构造方法,阻止类外new对象
一私:私有的克隆方法,阻止类外clone对象
一公:公共的静态的创建对象的方法
18.instanceof关键字
描述:判断一个对象是不是某一个类的实例
语法:$obj instanceof ClassName
返回:如果$obj是ClassName类的实例,则返回true;否则,返回false。
19.重载
PHP不支持重载。
PHP中的重载,主要通过是通过魔术方法来实现的
当你访问不存在或不可访问的属性时,魔术方法会自动调用
魔术方法的作用:屏蔽一些错误。
属性重载
__set()
描述:在给不可访问属性赋值时,__set() 会被调用
语法:public void __set ( string $name , mixed $value )
__get()
描述: 读取不可访问属性的值时,__get() 会被调用
语法:public mixed __get ( string $name )
__isset()
描述:当对不可访问属性调用 isset() 或 empty() 时,__isset()会被调用。
语法:public bool __isset ( string $name )
__unset()
描述:当对不可访问属性调用 unset() 时,__unset()会被调用。
语法:public void __unset ( string $name )
方法重载
__call()
描述:在对象中调用一个不可访问方法时,__call() 会被调用。
语法:public mixed __call ( string $name , array $arguments )
参数:
$name就是要调用的方法的名称
$arguments就是调用方法传递的参数的数组
__callStatic()
描述:用静态方式中调用一个不可访问方法时,__callStatic() 会被调用。
语法:public static mixed __callStatic ( string $name , array $arguments )
20.序列化
序列化:将变量转成可保存的字符串,并且不丢失变量的结构和类型。
反序列化:将变量字符串,再还原成变量。
提示:所有变量都可以序列化,除资源外
serialize()
描述:产生一个可存储的值的表示
语法:string serialize ( mixed $value )
unserialize()
描述:从已存储的表示中创建 PHP 的值
语法:mixed unserialize ( string $str )
21.常用的魔术常量
__LINE__:当前行号
__FILE__:当前文件的绝对路径
__DIR__:当前目录
__FUNCTION__:当前函数
__CLASS__:当前类名
__METHOD__:当前方法
22.常用类和对象的操作函数
1.检查类是否定义class_exists()
2.检查接口是否存在interface_exists()
检查方法是否存在method_exists()
检查属性是否存在property_exists()
3.返回对象的类名get_class()
4.返回父类名称get_parent_class()
5、检查一个变量是不是对象is_object()
以上是关于面向对象的主要内容,如果未能解决你的问题,请参考以下文章