PHP类的封装与继承详解
1. 封装
封装是指将类的属性和方法包装起来,同时对外提供访问接口。这样可以避免外部直接访问和修改类的属性和方法,保证了类的安全性。封装主要有以下两个原则:
- 只暴露需要被外部访问的方法和属性;
- 将类的属性设置为私有或受保护,只能通过公有方法访问和修改。
示例一:
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
被设置为私有,外部无法直接访问和修改。通过setName
和setAge
方法进行赋值,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类的封装与继承详解 - Python技术站