PHP类的封装与继承详解

封装是指将类的属性和方法包装起来,同时对外提供访问接口。这样可以避免外部直接访问和修改类的属性和方法,保证了类的安全性。封装主要有以下两个原则:

PHP类的封装与继承详解

1. 封装

封装是指将类的属性和方法包装起来,同时对外提供访问接口。这样可以避免外部直接访问和修改类的属性和方法,保证了类的安全性。封装主要有以下两个原则:

  1. 只暴露需要被外部访问的方法和属性;
  2. 将类的属性设置为私有或受保护,只能通过公有方法访问和修改。

示例一:

class Person {
    private $name;
    private $age;

    public function setName($name)
    {
        $this->name = $name;
    }

    public function setAge($age)
    {
        $this->age = $age;
    }

    public function getInfo()
    {
        return "My name is {$this->name}, I am {$this->age} years old";
    }
}

$person = new Person();
$person->setName('Jack');
$person->setAge(20);
echo $person->getInfo(); // 输出: My name is Jack, I am 20 years old

示例一中,$name$age被设置为私有,外部无法直接访问和修改。通过setNamesetAge方法进行赋值,getInfo方法返回封装了$name$age的信息。

2. 继承

继承是指通过一个类继承另一个类,继承类可以重写并扩展父类的属性和方法。在继承中,被继承的类称为父类或超类,继承类称为子类或派生类。

示例二:

class Person {
    protected $name;
    protected $age;

    public function __construct($name, $age)
    {
        $this->name = $name;
        $this->age = $age;
    }

    public function getInfo()
    {
        return "My name is {$this->name}, I am {$this->age} years old";
    }
}

class Student extends Person {
    private $school;

    public function __construct($name, $age, $school)
    {
        parent::__construct($name, $age);
        $this->school = $school;
    }

    public function getInfo()
    {
        return parent::getInfo() . ", and I am studying at {$this->school}";
    }
}

$student = new Student('Bob', 18, 'ABC University');
echo $student->getInfo(); // 输出: My name is Bob, I am 18 years old, and I am studying at ABC University

示例二中,Student类继承了Person类的属性和方法,通过parent::__construct调用了父类的构造函数,初始化了父类的$name$age属性,同时添加了一个私有的$school属性和一个重写的getInfo方法。

注意:继承是一种强依赖关系,子类的修改会影响到父类,因此不应轻易地去修改父类的属性和方法。同时,在使用继承的时候,需要遵循里氏替换原则,即父类能出现的地方子类一定能出现。

本文标题为:PHP类的封装与继承详解

基础教程推荐