【PHP7 面向对象-封装和继承】

本文深入探讨了面向对象编程中的类定义、封装与继承概念,通过具体实例展示了如何利用这些特性简化代码,提高复用性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、面向对象-类的常规写法

// 定义学生类
class Student
{
    public $name;
    public $age;
    public $sex;
    public $score; // 成绩
    
    public function __construct($name, $age, $sex, $score)
    {
        $this->name = $name;
        $this->age = $age;
        $this->sex = $sex;
        $this->score = $score;
    }
    
    public function printInfo()
    {
        echo '名字:'.$this->name.'<br>';
        echo '年龄:'.$this->age.'<br>';
        echo '性别:'.$this->sex.'<br>';
        echo '成绩:'.$this->score.'<br>';
    }
}

// 定义工人类
class Worker
{
    public $name;
    public $age;
    public $sex;
    public $salary; // 工资
    
    public function __construct($name, $age, $sex, $salary)
    {
        $this->name = $name;
        $this->age = $age;
        $this->sex = $sex;
        $this->salary = $salary;
    }
    
    public function printInfo()
    {
        echo '名字:'.$this->name.'<br>';
        echo '年龄:'.$this->age.'<br>';
        echo '性别:'.$this->sex.'<br>';
        echo '工资:'.$this->salary.'<br>';
    }
}

// 实例化 Student类,并传值
$stu = new Student('jack', 18, '男', 84);
// 调用 Worker类中的 printInfo 方法
$stu->printInfo();

echo '<hr>';

// 实例化 Worker类,并传值
$worker = new Worker('tom', 17, '男', 8000);
// 调用 Worker类中的 printInfo方法
$worker->printInfo();

运行结果:

普通类

我们可以看到,Student类 和 Worker类中有很多相同的属性和方法,因此,我们可以把相同的部分提取出来,定义一个新的类来承载它(即父类),然后让 Student类 和 Worker类去继承它(Student类 和 Worker类 为子类),通过调用父类中的属性和方法来实现我们的需求,这样可以使代码简化很多。执行效果如下:类的封装和继承

二、面向对象-类的封装和继承

// 定义父类 Person类
class Person
{
    public $name;
    public $age;
    public $age;
    
    public function __construct($name, $age, $sex)
    {
        $this->name = $name;
        $this->age = $age;
        $this->sex = $sex;
    }
    
    public function printInfo()
    {
        echo '名字:'.$this->name.'<br>';
        echo '年龄:'.$this->age.'<br>';
        echo '性别:'.$this->sex.'<br>';
    }
}

// Student类 继承 Person父类
class Student extends Person
{
    public $score; // 成绩
    
    public function __construct($name, $age, $sex, $score)
    {
        // 调用父类中的构造方法
        parent::__construct($name, $age, $sex);
        $this->socre = $score;
    }
    
    public function printInfo()
    {
        // 调用父类中的普通方法
        parent::printInfo();
        echo '成绩:'.$this->score.'<br>';
    }
}

// Worker类 继承 Person父类
class Worker extends Person
{
    public $salary; // 工资
    
    public function __construct($name, $age, $sex, $salary)
    {
        // 调用父类中的构造方法
        parent::__construct($name, $age, $sex);
        $this->salary = $salary;
    }
    
    public function printInfo()
    {
        // 调用父类中的普通方法
        parent::printInfo();
        echo '工资:'.$this->salary.'<br>';
    }
}

$stu = new Student('jack', 18, '男', 84);
$stu->printInfo();

echo '<hr>';

$worker = new Worker('tom', 17, '男', 8000);
$worker->printInfo();

运行结果:

在这里插入图片描述

三、注意事项

1) 如果两个或多个子类中有相同的方法和属性,可以定义到父类中,让子类继承父类;
2) 在子类中调用父类的构造方法;
parent::__construct($name, $age, $sex); // 如果父类中有参数,则子类调用的时候也要写
3)在子类中调用父类的普通方法;
parent::方法名();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值