• PHP 的oop思想


    优点:

    1.方便代码维护,更人性化

    2.方便代码扩展

    3.

    语法:

    class 类名

    {

      修饰词 属性名;

      修饰词 function 方法名("参数"(看情况而定可以不用传参))

      {

        内容;

      }

    }

    //实例化类

    $object = new 类名;

    $object->方法名("参数"(看你封装的方法是否有传参));

    关键字:

    final:子类无法重写被修饰的方法;

    static:静态;被它修饰的属性可以直接使用,不用实例化类,eg:$user=Person::$name;(类中有一个static $name='张三';)有两种调用方式1."::",2."self"

    __get():获取属性值;

    __set():给属性赋值;

    TYPE_CREDITCARD:常量,一旦定义之后值不会再改变;

    extends:继承,子类可以直接使用父类的方法,优先级,子类高于父类,如果子类和父类的方法名相同,引用类的属性的时候回返回子类的属性值,方法也是

    parent::父类被重写的方法,不能用"父类类名::被重写的方法";

    self::method("方法名")();调用的是子类的方法();

    interface:接口

    implements 接口名,接口名...;实现继承多个接口

    语法:

    interface 名称

    {

      function 方法名();

    }

    注意:这里没有属性和方法体

    trait : 可以将多个类中,共用的一些属性和方法提取出来做来公共trait类,就像是装配汽车的配件,如果你的类中要用到这些配件,就直接用use导入就可以了,相当于把trait中的代码复制到当前类中.
    因为trait不是类,所以不能有静态成员,类常量,当然也不可能被实例化。其实一个类中的代码,可以分为二大部分:一是我们自己写的代码,暂且叫私有代码吧,还有一部分就是公共代码了,

    之前主要是由父类代码组成。现在你的类中的公共代码又多一个新成员:trait类代码。如果说:继承可以纵向扩展一个类,那么trait就是横向扩展一个类功能

    eg:


    <?php

    trait Test1 {

    public $name = 'PHP中文网'; //trait类中可以用属性

    public function hello1() //trait类中主要成员是方法

    { return 'Test1::hello1()'; } } //2.创建triat类

    Test2 trait Test2 { function hello2() { return 'Test2::hello2()'; } } //3.创建Demo1类

    class Demo1 { use Test1, Test2; } //进行测试 $obj = new Demo1; echo $obj->hello1(); //访问trait类Test1中的

    hello1() echo '<hr>'; echo $obj->name; //访问ttrait类

    Test1中的$name属性 echo '<hr>'; echo $obj->hello2(); //访问ttrait类

    Test1中的hello2()

    注意:1.一个类中如果使用了多个trait回发生致命错误

      2.一个类中使用两个不同的trait中相同方法需要用as解决冲突

    抽象类:

    abstract关键字修饰,父类的抽象方法是只有方法名,没有方法体,子类必须实现父类抽象方法

    注意:1.抽象方法只能在抽象类中,所以只有一个类中存在一个抽象方法就必须定义成抽象类

      2.抽象类不能直接实例化

    构造函数:

    __construct:初始化类属性的特殊函数

    子类继承父类不会调用父类构造函数,需要在子类中显示调用:语法:父类名::__cunstruct();

    析构函数:

    __destruct():会在程序执行结束后调用

    类检查:class_exists();

    检查类是否在数组中:get_declared_classes()

    得到类中属性和方法:get_calss_methods和get_class_vars

    得到父类名称:get_parent_class()

    判断方法是否存在:method_exists();

    序列化:将一个对象转换成字节流,这样就可以将对象保存在文件中,这对于数据的持久化很有用

    serialize():产生一个可存储的值的表示

    注解:

    返回字符串,此字符串包含了表示 value 的字节流,可以存储于任何地方。

    这有利于存储或传递 PHP 的值,同时不丢失其类型和结构。

    想要将已序列化的字符串变回 PHP 的值,可使用 unserialize()serialize() 可处理除了 resource 之外的任何类型。甚至可以 serialize() 那些包含了指向其自身引用的数组。你正 serialize() 的数组/对象中的引用也将被存储。

    当序列化对象时,PHP 将试图在序列动作之前调用该对象的成员函数 __sleep()。这样就允许对象在被序列化之前做任何清除操作。类似的,当使用 unserialize() 恢复对象时, 将调用 __wakeup() 成员函数。

    unserialize()

    __sleep()在一个对象被序列化之前被调用,它能执行清理一些必要的清理工作,保持对象的状态 

  • 相关阅读:
    asyncio异步IO--协程(Coroutine)与任务(Task)详解
    python爬虫实战:利用scrapy,短短50行代码下载整站短视频
    深入理解Git的实现原理
    Upsource 代码审查工具安装及使用
    MAC MAMP集成环境安装 PHP 扩展
    千万数据量数据表分表实践
    设计模式:序言
    设计模式 行为型
    PHP5底层原理之变量
    PHP5底层原理之垃圾回收机制
  • 原文地址:https://www.cnblogs.com/yinyusoso/p/8796171.html
Copyright © 2020-2023  润新知