4. 静态属性与静态方法
- 静态属性:
public / protected / private static $变量名
不用实例化类 , 直接调用 类名 :: $变量名
但实例化后 , 不允许使用 对象 -> $变量名
- 静态方法
public / protected / private static function 方法名()
不用实例化类 , 直接调用 类名 :: 方法名()
实例化后 , 对象 -> 方法名()
静态方法中,$this伪变量不允许使用。可以使用self,parent,static在内部调用静态方法与属性。
class Car { private static $speed = 10; public static function getSpeed() { return self::$speed; } public static function speedUp() { return self::$speed+=10; } } class BigCar extends Car { public static function start() { parent::speedUp(); } } BigCar::start(); echo BigCar::getSpeed();
如果构造函数定义成了私有方法,则不允许直接实例化对象了,这时候一般通过静态方法进行实例化,在设计模式中会经常使用这样的方法来控制对象的创建,比如单例模式只允许有一个全局唯一的对象。
class Car { private function __construct() { echo 'object create'; } private static $_object = null; public static function getInstance() { if (empty(self::$_object)) { self::$_object = new Car(); //内部方法可以调用私有方法,因此这里可以创建对象 } return self::$_object; } } $car = new Car(); //这里不允许直接实例化对象 $car = Car::getInstance(); //通过静态方法来获得一个实例
5. 继承
继承是面向对象程序设计中常用的一个特性,汽车是一个比较大的类,我们也可以称之为基类,除此之外,汽车还分为卡车、轿车、东风、宝马等,因为这些子类具有很多相同的属性和方法,可以采用继承汽车类来共享这些属性与方法,实现代码的复用。
class Car { public $speed = 0; //汽车的起始速度是0 public function speedUp() { $this->speed += 10; return $this->speed; } } //建立一个Truck类,扩展Car类,并覆盖speedUp方法,使速度累加50 class Truck extends Car{ public function speedUp(){ parent::speedUp(); $this->speed += 50; return $this->speed; } } $car = new Truck(); $car->speedUp(); echo $car->speed;
5. 重载
PHP中的重载指的是动态的创建属性与方法,是通过魔术方法来实现的。
- 属性的重载通过__set,__get,__isset,__unset来分别实现对不存在属性的赋值、读取、判断属性是否设置、销毁属性。
内容版权声明:除非注明,否则皆为本站原创文章。