美文网首页
7. 类与对象

7. 类与对象

作者: 57fc17b7d598 | 来源:发表于2017-06-23 16:26 被阅读6次

    基本概念

    参考:7.1 类的概念

    访问控制

    针对对象的属性和方法,可以使用访问控制来限制它的作用域

    public:公开的,在类中、实例中、子类中都能访问

    protected:受保护的,在类中、子类中可以访问

    private:私有的,仅能在类中访问

    static:静态的,在哪都能用

    类的属性在定义时必须指定访问控制级别,像下面这样:

    // 类
    class Foobar{
        // 我将报错
        $abc = "123";
    
        // 我不会报错
        public $test = 456;
    }
    

    类的方法如果不指定访问控制级别,那么默认就是 public 公开的。

    属性常量

    参考:7.2 类的属性

    对象继承

    参考:7.3 对象继承

    自动加载

    参考:7.4 类的自动加载

    构造和析构

    参考:7.5 构造和析构

    范围解析操作符

    参考:7.6 范围解析操作符

    静态属性

    一个类的属性和方法可以使用 static 标记为静态的,如没有显示指定访问控制级别,则默认为公开的。

    静态成员需要使用 :: 范围解析操作符 来访问。

    静态成员可以不用实例化对象而直接访问,但静态属性不能使用实例化对象来访问,而静态方法可以。

    抽象类

    参考:7.7 抽象类

    对象接口

    参考:7.8 对象接口

    Trait

    参考:7.9 Trait

    匿名类

    参考:7.10 匿名类

    重载

    参考:7.11 重载

    遍历对象

    参考:7.12 遍历对象

    魔术方法

    参考:7.13 魔术方法

    Final 关键字

    final 关键字可以应用到类或方法上
    final 应用在类上时,该类无法被继承
    final 应用在方法上时,该方法无法被重写

    对象复制

    对象的赋值通常是引用的,通过 clone 关键字可获取一个新的拷贝,使用 clone 后, 系统会先执行该对象的 __clone 方法,可以根据需要在该魔术方法中执行一些修改属性的操作。

    // 定义类
    class Example{
        // 我的属性
        private $foo = 123;
        private $bar = 'abc';
        // clone
        public function __clone(){
            $this->foo = 789;
        }
    }
    // 实例化
    $exam = new Example();
    // object(Example)#1 (2) { ["foo":"Example":private]=> int(123) ["bar":"Example":private]=> string(3) "abc" }
    var_dump($exam);
    
    // 执行复制
    $temp = clone $exam;
    // object(Example)#2 (2) { ["foo":"Example":private]=> int(789) ["bar":"Example":private]=> string(3) "abc" }
    var_dump($temp);
    

    对象比较

    两个对象的属性和值相同,且是同一个类的实例,那么在执行 == 比较时,相等。
    两个对象的属性和值相同,且是同一个类的同一个实例,那么在执行 === 比较时,相等。
    判断一个对象是否为某一个类的实例,可以使用 instanceof 关键字。

    类型约束

    函数或类的方法可以对参数进行类型约束,调用时必须传递指定类型的数据,否则报错。

    // 定义类
    class Example{
        // 给方法的参数增加类型约束
        public static function fn(string $str){
            echo $str;
        }
    }
    // 给函数的参数增加类型约束
    function fun(int $num){
        echo $num;
    }
    // 调用
    Example::fn('hello world');
    fun(123);
    

    后期静态绑定

    static 不在会被解析成定义当前方法所在的类了,而是根据实际运行时来计算。

    当一个类的方法中使用了 static 关键字,那么到时候调用这个方法时,static 的指向并非是当前类,有可能指向其他父类。

    static 的指向是上一个 非转发调用 时系统自动保存下来的类,转发调用 指的是 self::parent::static:: 等。

    后期静态绑定这个概念通常会出现在继承关系中。

    $this 代表的是当前实例

    self 代表的是当前类、通常用于调用当前类的静态属性

    parent 代表父类

    对象的序列化

    可以使用 serialize() 将对象进行序列化成字符串,然后将字符串保存,在另外一个脚本中使用 unserialize() 将保存的字符串读取传递进去,重新得到该对象。

    需要注意的是,在 unserialize() 之前,记得 include 将类的定义文件引入。

    相关文章

      网友评论

          本文标题:7. 类与对象

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