php面向对象OOP常用的概念

__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();
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值