<?php练功房

第 4 章 · 面向对象 · 第 4.1 课

类与对象

约 18 分钟

类是一张图纸,描述一类东西有哪些数据(属性)和能做什么(方法)。对象是照着图纸造出来的具体实例。用 new 创建对象,用 -> 访问它的属性和方法。

在类的内部,$this 指“当前这个对象”。__construct 是构造函数,new 的时候自动调用,通常用来给属性赋初值。

构造器属性提升(PHP 8)

在构造函数的参数前面直接写 public、private 等修饰符,PHP 会自动创建同名属性并赋值,省掉一大段样板代码。下面的 Point 和上面的写法效果一样。

封装:public 和 private

  • public:任何地方都能访问。
  • private:只有类自己内部的代码能访问。

把数据设为 private,只通过方法去修改,类就能保证数据始终合法。下面的银行账户不允许存入负数,外面的代码也没办法直接把余额改掉。

对象是“引用”

把对象赋给另一个变量时,两个变量指向同一个对象,这和数组的复制不同。需要一份独立的副本时用 clone。

选择题

类的方法内部,要访问当前对象的 name 属性,应该怎么写?

练习 1

长方形

写一个 Rectangle 类:

  • 构造函数接收宽 $width 和高 $height(浮点数)
  • area() 返回面积
  • perimeter() 返回周长

练习 2

可以链式调用的计数器

写一个 Counter 类:

  • 私有属性 $count,初始为 0,外部不能直接访问
  • increment() 让计数加 1,并返回 $this,这样就能连着调用
  • getCount() 返回当前计数
$c = new Counter();
echo $c->increment()->increment()->getCount();   // 2