__construct() 构造函数
- 作用和应用场景
当类在被实例化的时候,自动执行该函数
__destruct() 析构方法
- 作用和应用场景
析构方法允许在销毁一个类之前执行的一些操作或完成一些功能,比如说关闭文件、释放结果集等。析构函数不能带有任何参数,其名称必须是 __destruct() 。
重载
- 作用和应用场景
PHP 中的重载是指在子类里面定义了一个和父类同名的方法,且该方法将在子类中将把父类的方法覆盖。
static
- 作用和应用场景
声明类成员或方法为 static ,就可以不实例化类而直接访问
- 属性
静态成员属于类,不属于任何对象实例,但类的对象实例都能共享,用于保存类的公有数据;
不能通过一个对象来访问静态成员
abstract 抽象类
- 作用和应用场景
通过继承已达到代码复用
可以有构造函数,但不可以实例化
- 属性
可以定义变量,静态变量,常量
- 方法
可以有实现了的方法
可以没有抽象方法,如果有抽象方法,但不能有方法体,只能提供给子类实现
子类必须实现继承的抽象方法,且方法的权限不能小于父类方法的权限
//抽象类
abstract class A{
//抽象方法
abstract function function_name();
}
interface 接口
- 作用和应用场景
定规范,让其他子类来实现
接口可以继承接口,使用extends关键字可以实现多继承
不能实例化
- 属性
不能定义变量,静态变量
只能定义public常量
- 方法
使用父级接口的子类必须实现接口的所有方法
方法必须是public
final
- 作用和应用场景
希望某个类不被其它的类来继承
- 属性
final关键字不能去修饰属性.
- 方法
希望某个方法,不能子类改写
//修饰类
final class A{
}
//修饰方法
class A{
final public function test(){
}
}
const
- 作用和应用场景
在类中声明常量,因为在类中声明常量,不能是define()函数!必须使用const关键字。
在定义的时候需要赋初值,且不能修改.
//定义
class A{
const 常量名=值;
}
//获取
A::常量名;
__call()
- 作用和应用场景
当对象访问不存在的方法时,自动执行该函数。也称之为“方法重载”
class Person {
private $name;
function __construct($name) {
$this->name = $name;
}
function sayName() {
echo "名字:".$this->name;
}
//$function_name 调用的不存在方法名
//$arguments 以数组的方式接收不存在方法的多个参数
function __call(string $function_name, array $arguments)
{
echo "该方法不存在";
}
}
$p1 = new Person("小红");
$p1->sayName(); // 名字:小红
$p2->sayAge(); // 该方法不存在
__callStatic( f u n , fun, fun,param)
- 作用和应用场景
当对象访问不存在的静态方法时,自动执行该函数
instanceof
- 作用和应用场景
检测一个对象,是否是某一个类的实例。(包括爹辈,爷爷辈……)
__autoload()
- 作用和应用场景
使用尚未被定义的类时自动调用
该方法接收的一个参数,就是欲加载的类的类名,所以这时候需要类名与文件名对应
全局只能定义一次不够灵活
function __autoload($class_name)
{
require_once $class_name.'.php';
}
//当前页面 A 类不存在则自动调用 __autoload() 方法,传入参数 A
$A = new A();
由于不够灵活现大多使用 spl_autoload_register 函数
spl_autoload_register ([ callable $autoload_function [, bool $throw = true [, bool $prepend = false ]]] ) : bool
// $autoload_function 欲注册的自动装载函数。如果没有提供任何参数,则自动注册 autoload 的默认实现函数spl_autoload()。
// $throw 此参数设置了 autoload_function 无法成功注册时, spl_autoload_register()是否抛出异常。
// $prepend 如果是 true,spl_autoload_register() 会添加函数到队列之首,而不是队列尾部。
//相关sql函数
spl_autoload_register:注册 _autoload () 函数
spl_autoload_unregister:注销已注册的函数
spl_autoload_functions:返回所有已注册的函数
spl_autoload_call:尝试所有已注册的函数来加载类
spl_autoload :_autoload () 的默认实现
spl_autoload_extionsions: 注册并返回 spl_autoload 函数使用的默认文件扩展名。
__clone()
- 作用和应用场景
__clone() 方法只会在对象被克隆的时候自动调用。
在克隆时改变原对象的内容,通过 __clone() 方法来重写原本的属性和方法
class Person {
private $name;
function __construct($name) {
$this->name = $name;
}
function sayName() {
echo "名字:".$this->name;
}
function __clone() {
$this->name = "小明";
}
}
$p1 = new Person("小红");
$p1->sayName(); // 名字:小红
$p2 = clone $p1;
$p2->sayName(); // 名字:小明
私有属性处理
__set( k e y , key, key,value) 方法用于设置对象中不可访问(未定义)的属性赋值时,自动调用该函数。". k e y . " 属 性 不 可 访 问 或 未 定 义 , 值 " . key."属性不可访问或未定义,值". key."属性不可访问或未定义,值".value
__get( k e y ) 方 法 用 于 获 取 对 象 中 不 可 访 问 ( 未 定 义 ) 的 属 性 值 时 , 自 动 调 用 该 函 数 。 " . key) 方法用于获取对象中不可访问(未定义)的属性值时,自动调用该函数。". key)方法用于获取对象中不可访问(未定义)的属性值时,自动调用该函数。".key."属性不可访问或未定义
__isset($key) 方法用于检测私有属性值是否被设定。
__unset($key) 方法用于删除私有属性。
__toString()
- 作用和应用场景
当对象被当作字符串形式输出时,自动执行该函数
__invoke($value)
- 作用和应用场景
当对象被当作函数调用时,自动执行该函数
对象的序列化和反序列化
- 作用和应用场景
需要将对象及其方法传递到其他使用的地方
序列化对象不能序列化其方法,所以在 unserialize 的时候,当前文件必须包含对应的类或者 require 对应的类文
class Person {
private $name;
function __construct($name) {
$this->name = $name;
}
function sayName() {
echo "名字:".$this->name;
}
function __clone() {
$this->name = "小明";
}
}
$p1 = new Person("小红");
//序列化
$p1_string = serialize($p1);
//将对象序列化后存在文件或session
p1.text
//再反序列化
$p2 = unserialize(file_get_contents("p1.text"));
$p2 -> sayName();