PHP面向对象详解
1-1面向对象简介
项目代码应该有单个能够起子程序作用的对象组成
目标:
重用性
灵活性
扩展性
1-2类(Class)与对象(Obj)
类生成对象使用new 关键字来生成对象
类里面有属性和方法:
属性:public $cpu='aa';
方法:public function aa(){};
访问控制:
public 共有(所有人可以访问)
      private私有(只允许自身调用)
       procetced受保护(只允许本身和继承子类调用)
内部调用采用:$this调用属性方法
2-1构造方法,析构方法
构造方法:__construct(),类的初始化方法,在实例化的时候直接就会执行,必须为公共的,但是如果为私有化,那么就为单利模式,可以接受参数,在实例化对象的时候传入;
析构方法:__destruct(),在对象销毁时执行的方法
类与常量:
常量用const定义常量,可以使用self::来调用常量,外部调用不需要实例直接类名::调用
2-3类的继承与final关键字
使用B类可以使用extends关键字继承A类,继承过程中可以直接调用父类的方法,也可以重写父类。在子类中使用prent::可以使用父类中的构造方法,不建议超过三层
final关键字可以在类前面加上--该类不能被继承
加载类的方法前面意味着该方法不能被重写
2-4命名空间:
namespace定义命名空间,使用命名空间常量,类都会受到影响,
在命名空间下面定义常量使用const
可以使用关键字use关键字导入类, use 命名空间\类;
可以使用as 更改类名,起个别名use 命名空间\类 as 类2;
方法使用use function 命名空间\方法
常量使用use const 命名空间\常量
分为全局空间,和局部空间
局部空间定义全局空间的类使用\类名引入
2-5类的自动加载:
php5中使用__autoload(类名)
自动在家文件类
function __autoload($className)
{
    require $className. ".php";
}
先进科学的方法使用
spl_autoload_register(function ()
{
    require $className. ".php";
});
推荐加载类的话:命名空间采用文件夹名称
自动加载引入:
spl_autoload_register(function ()
{
    include str_replace(:"\\","/",$className.".php");
});
Static关键字:
加入该关键字 直接使用类::属性名就可以调用(不需要实例化)
在类中的方法不能使用$this只能使用self::
2-7魔术方法:
__set:(属性名,属性值)设置属性
__get:(属性名)获取属性
__isset:(属性名)判断是否存在私有属性
__unset(属性名)删除私有属性
__call:(属性名,参数)不存在调用的方法自动调用该方法,可以用来抛出异常
__callStatic(静态方法名称,参数)不存在的静态方法,调用此方法
__invoke:当对象以方法的方式调用,调用该方法
__toString:当想打印对象的时候自动执行该方法
2-6后期静态绑定
如果使用$self::,继承过程中修改的是父类的方法,如果用Staic来使用的今天方法,那么久调用的本身的方法
2-7 PHP拷贝
浅拷贝,深拷贝
浅拷贝就是其他变量改变了值,源来的变量对象也会跟着改变
深拷贝就是其他的对象变量改变了,源来的不会,只需要采用clone关键字
类型约束:
就是在传入参数的时候前面添加类型 空格参数
2.8 trait关键字
使用USE关键字引入trait定义的类 可以打到快速复用的效果
可以使用use A,B;引入两个方法,支持嵌套操作
2.9接口类设计模式
咦interface 关键字定义开发规定A类,例如吃饭睡觉两个方法
然后定义B类使用imlements关键字继承A类,必须要重写A类中的吃饭睡觉两个方法,
C类中定义类型约束必须为B类,那么业务逻辑就
抽象类:abstact关键字定义,与接口类的区别是抽象类可以自身实现方法,接口类只能定义但是不能实现方法
抽象类用extends继承
单例模式:
确保一个类只有一个实例。定义一个私有静态属性储存这个类的唯一实例,然后定义私有构造方法(无法实现实例化对象)__construct,也把__clone私有化,在定义一个公共方法A获取这个类的唯一的实例,
public static function getInstance(){
        if(!(self::$a instanceof self)){
        self::$a=new self();
        }
        return self::$a;
    }
直接使用A::getInstance() 获取单例模式
工厂模式:负责用来创建类的实例
定义A类,然后定义B类实例化A类,每次引入只需要引入B类即可


打赏

本文 暂无 评论

回复给

Top