美文网首页程序员
PHP简明教程-面向对象基础 2

PHP简明教程-面向对象基础 2

作者: 栗子boomboomboom | 来源:发表于2017-07-03 15:47 被阅读0次

    PHP简明教程

    面向对象基础 2

    其他的几个魔术方法

    方法名 触发时机 参数1 参数2 备注
    __callStatic 当调用不存在的静态方法的时候自动执行这个方法 函数名 参数(数组) 该方法必须是static
    __sleep 当序列化一个对象的时候调用这个方法 有返回值,返回要序列化的属性,组成一个数组
    __wakeup 当反序列一个对象的时候调用 可以做一些初始化的工作
    __clone 当clone一个对象的时候会自动调用 可以修改一些属性

    一些其他函数的应用

    serialize:序列化
    将程序中的一个对象进行序列化,然后保存起来    
    
    unserialize:反序列化
    将序列化的字符串还原,恢复原来的对象    
    
    call_user_func
        call_user_func([$xiang, 'eat'], 1000); == $xiang->eat(1000);
    
    call_user_func_array
        call_user_func_array([$xiang, 'eat'], [1000, 2000, 3000]); == $xiang->eat(1000,2000,3000);
    
    var_export
         输出或返回一个变量的字符串表示  
        $str = var_export($arr, true);  
        将一个数组变成生成数组的字符串保存起来  
    

    抽象类

    抽象类关键字 abstract

    1. 抽象类不能实例化对象
    2. 抽象类的目的就是让子类继承并实现其规定的抽象方法
    3. 子类中必须实现抽象类中规定的抽象方法
    4. 如果抽象方法中有参数并且参数有默认值,子类实现的时候也要有参数和默认值
    5. 抽象方法必须是public或者protected(要让子类继承)
    6. 抽象类可以继承抽象类 但是子类必须实现继承的抽象方法

    接口

    接口关键字 interface

    1. 接口中的方法都是抽象方法,并且是public
    2. 实现接口用implements
    interface A {
        
    }
    class B implements A {
        //B类实现A类
    } 
    

    3.可以同时实现多个接口,中间使用逗号隔开

    interface AA {
        
    }
    class M implements A,AA {
        //M类同时实现A类和AA类
    }
    

    4.继承父类在实现接口之前

    class C {
        
    }
    class D extends C implements A {
        //D类继承C类并实现A类
    }
    

    5.接口同样可以继承接口,但是子类必须实现所有方法

    interface E extends A {
        //接口E继承接口A,E中必须实现A中所定义的方法
    }
    

    6.接口中不能添加成员变量

    多态

    重写是一种多态,相同的接口给不同的对象,得到的响应不同,也是多态

    trait(特性)

    • php没有多继承 使用trait可以模拟实现多继承
    • traitclass的写法一样,只是把class变成了trait
    trait A{
        
    }
    
    • trait中可以添加成员变量,一般只添加成员方法
    • trait中的方法如果想要子类使用,必须是public
    • trait不能被实例化
    • trait可以嵌套trait
    trait B{
        use A;
    }
    
    • 解决多个trait中方法名冲突问题:(了解)
            use Dun, Sword{
            Dun::blood insteadof Sword;
            Dun::blood as blood1;
            Sword::blood as blood2;
        }
    

    类型约束

    类C语言(严格类型)

    function buy(Girl $girl) 
    

    命名空间 namespace

    命名空间要结合自动加载实现MVC框架

    • 命名空间可以解决同一文件中不能有相同的类名问题
    • 命名空间一般都小写
    • 第一个命名空间的前面不能有任何的代码
    • 命名空间的范围是一直向下,直到下一个命名空间的开始
    • :根空间,没有写命名空间的都在根空间下
    use hello\Person;    //使用命名空间下的类  
    use baby\Person as SeLang;  //给命名空间下的类起别名  
    use namespace1\namespace2\Person  //namespace2是namespace1的子空间
    

    遍历对象

    对象可以被当成数组来遍历,遍历的时候,键就是属性名,值就是属性值
    类外:
    只能遍历public属性
    类内:
    所有属性都能遍历出来

    $a = new A();
    foreach($a as $key => $v)
    

    匿名类

    $obj = new class {
        public $name;
        public $height;
        function say()
        {
            echo '100';
        }
    };
    

    相关文章

      网友评论

        本文标题:PHP简明教程-面向对象基础 2

        本文链接:https://www.haomeiwen.com/subject/hdfzcxtx.html