美文网首页
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.类与对象:

    一.类的定义:Java中的定义分为两种 :类声明和类主体 二.类主体:类主题包括类的成员变量的说明和成员方法的定...

  • 7. 类与对象

    基本概念 参考:7.1 类的概念 访问控制 针对对象的属性和方法,可以使用访问控制来限制它的作用域 public:...

  • dart快速入门教程 (7.1)

    7.面向对象 dart是一门使用类和单继承的面向对象语言,所有的对象都是类的实例,所有的类都是Object的子类,...

  • JavaScript高级

    1.编程思想 2.对象与类 3.面向对象版tab 栏切换 4.构造函数和原型 5.继承 6.ES5新增方法 7.函...

  • 类与对象(类与对象定义)

    类与对象的定义和使用 如果在程序之中要定义一个类可以使用class关键字完成,而定义的语法如下: 在这个类中只是定...

  • Day13类和对象的总结

    总结:1.编程思想2.类的声明3.对象方法4.init方法和构造方法5.对象属性6.对象属性的增删改查7.类的字段...

  • 重学iOS——7.对象、类对象、元类的关系

    <------------本部分内容复制自某培训机构视频教程------------> 本小节知识: 【了解】类的...

  • 函数类和对象区别

    类与类:行为不同 对象与对象:数据不同

  • python入门开发学习笔记之类与对象

    本节重点 掌握什么是类、什么是对象 掌握如何定义及使用类与对象 了解对类与对象之间的关系 类与对象的概念 类即类别...

  • 类对象与类的对象

    类对象(obj.getClass)描述的是类的代码信息,比如哪些属性、属性是什么类型、变量名是什么、哪些方法、方法...

网友评论

      本文标题:7. 类与对象

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