再探面向对象补充

面向对象扩展

面向对象:一直把对象放在心上,实质上就是把生活中的要解决的问题都用对象的方式进行存储,对象之间是可以互动的
对象的组成:属性与方法
对象的特点:独一无二的特定事物,可以重复使用
面向对象基本思路:识别对象,识别对象的属性,识别对象的行为
面向对象的基本原则:对内是高内聚,对外是低耦合
面向对象的目的达到代码的重用性 灵活性 扩展性
类常量是属于类的
类 接口 函数 常量都会受命名空间影响
命名空间分为局部空间和全局空间
use关键字不仅能引用类,也可以引用常量和函数,use const,use function
如果在局部空间的文件里调用全局空间的类,需要在类名前面带上反斜杠,而如果调用函数或者常量,则不用,因为php会尝试在指定域名空间下寻找函数或者常量,如果找不到就会去全局空间下寻找
类的自动加载function __autoload(){}以及spl_autoload_register{}支持匿名函数和数组方式
static关键字定义的属性和方法是属于类的,所以在静态方法中不要使用$this(属于对象),调用的时候不需要实例化,调用属性的时候不要忘记带$符号,方法不需要带
self,parent代表类的本身,而不是对象
后期静态绑定static::会根据上下文决定静态方法到底属于哪个类,而slef,__CLASS__表示定义时的类
trait是可以嵌套的
接口是类的模板,类是对象的模板,接口是可以被继承的,一个类可以实现多个接口,用逗号分割

属性重载

在给不可访问属性赋值时,__set() 会被调用。
读取不可访问属性的值时,__get() 会被调用。
当对不可访问属性调用 isset() 或 empty() 时,__isset() 会被调用。
当对不可访问属性调用 unset() 时,__unset() 会被调用

方法重载

在对象中调用一个不可访问方法时,__call() 会被调用
在静态上下文中调用一个不可访问方法时,__callStatic() 会被调用
__toString() 方法用于一个类被当成字符串时应怎样回应
当尝试以调用函数的方式调用一个对象时,__invoke() 方法会被自动调用
serialize() 函数会检查类中是否存在一个魔术方法 __sleep()。如果存在,该方法会先被调用,然后才执行序列化操作
unserialize() 会检查是否存在一个 __wakeup() 方法。如果存在,则会先调用 __wakeup 方法,预先准备对象需要的资源,__wakeup() 经常用在反序列化操作中,例如重新建立数据库连接,或执行其它初始化操作

对象复制

浅拷贝:变量之间地址传递,节省内存
深拷贝:变量之间值传递
对象的赋值默认浅拷贝,怎让做才能深拷贝?使用clone关键字
只要是对象赋值就是浅拷贝,所以,尽管该对象使用clone关键字,如果该对象的属性也是对象的话,该属性仍然是浅拷贝

class A {
    public $name = '';
    public $age = 0;
    public $obj = null;

    public function __clone()
    {
    	//深拷贝
        $this->obj = clone $this->obj;
    }
}
class B {
    public $summary = 100;
}
$a = new A;
$a->obj = new B;
$b = clone $a;
$b->obj->summary = 10;
var_dump($a->obj->summary);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值