批改状态:合格
老师批语:后面还有更加有趣的知识 , 不要错过
OOP编程简称面向对象编程,面向对象编程有三大特性,封装,继承,多态,利用这三大特性来实现代码的设计与实现,这个编程思维非常的接近人的思维了,就好像在公司里,老板说要做件事情,把每个地方做什么,给设计出来,然后员工实现出来。只不过这是用在编程里面,道理是一样的。如果想学会面向对象编程,就必须了解好,封装,继承,多态,下面通过案例带大家了解一下。
继承可以想象成,子承父业,继承了父业之后,可以重新改版业务,扩展业务,都行。在编程里也一样,总共分为,继承,重写,扩展
简单的继承,就是把父类的中的属性和方法,给复制过来。
实例:
// 父类:基类class Fruits{protected $name = '香蕉';protected $source = '泰国';// 方法public function message(){return "名称:{$this->name}"."产地为:{$this->source}";}}// 子类:扩展类class Banana extends Fruits{}// 客户端$banana = new Banana();echo $banana->message();
输出:名称:香蕉产地为:泰国
通过输出我们可以看到,子类并没有一句代码,仅仅是继承了父类的方法,这就是基本的继承,下面来说一下扩展
重写就是将父类中的属性进行更新,但是这个属性在子类中,并不在父类中。
实例:
// 父类:基类class Fruits{protected $name = '香蕉';protected $source = '泰国';// 方法public function message(){return "名称:{$this->name}"."产地为:{$this->source}";}}// 子类:扩展类class Banana extends Fruits{// 属性重写protected $name = '葡萄';protected $source = '中国';protected $weight = '1.9';// 方法重写public function message(){return "名称:{$this->name}"."产地为:{$this->source}"."重量为:{$this->weight}";}}// 客户端$banana = new Banana();echo $banana->message();
输出:
名称:葡萄产地为:中国重量为:1.9
同样的代码,我们只是在子类中,将父类的属性与方法进行了重写,结果就不一样
扩展顾名思义,就是在父类的基础上,进行扩建,不对原来的属性与方法进行更改
示例:
// 父类:基类class Fruits{protected $name = '香蕉';protected $source = '泰国';// 方法public function message(){return "名称:{$this->name}"."产地为:{$this->source}";}}// 子类:扩展类class Banana extends Fruits{protected $name = '葡萄';protected $source = '中国';protected $weight = '1.9';// 属性扩展protected $color = 'yellow';public function message(){return "名称:{$this->name}"."产地为:{$this->source}"."重量为:{$this->weight}";}// 方法扩展public function appearance(){return "颜色:{$this->color}";}}// 客户端$banana = new Banana();echo $banana->message();echo $banana->appearance();
输出名称:葡萄产地为:中国重量为:1.9颜色:yellow
可以看到,通过扩写把父类中的功能进行了增加。
前面我们说过,老板就是告诉员工,这个地方怎么做,那个地方怎么做,并没有执行,都是一些抽象的东西,比如,老板说这个地方要优化一下,你去改一下,这就是一句抽象的话,因为老板并没有告诉你要怎么做,员工知道要优化后,就开始着手敲代码,这就是实现。设计与实现始终是面向对象的核心,不是单纯的敲代码。
既然是抽象,就不会有方法的的实现,以及属性的值。
示例:
// 设计类abstract class Fruits{protected $name;protected $source;protected $weight;// 方法abstract protected function message();// 抽象的方法是没有方法体的}// 实现类class Banana extends Fruits{protected $name = '葡萄';protected $source = '中国';protected $weight = '1.9';protected function message(){// 实现抽象类,必须将抽象方法实现return "名称:{$this->name}"."产地为:{$this->source}"."重量为:{$this->weight}";}}// 最终工作类class work1 extends Banana{public function printf(){return parent::message();}}// 客户端$banana = new work1();echo $banana->printf();
输出名称:葡萄产地为:中国重量为:1.9
通过abstract来声明,就可以将一个类变为抽象类,也就是老板说的话,通过实现类来写代码,把老板说的话实现出来,非常巧妙。
接口就像两个不同的东西,通过接口结合在一起,这个在后面的实战中可能会用的多,目前只能知道一些基本语法。
示例
interface iUser{// 接口常量const NATION = '俄罗斯';public static function write();// 构造方法}// 工作类实现接口class User implements iUser{protected static $name = '赵忠祥';// 接口中的抽象方法,必须在工作类中实现public static function write(){return self::$name.'的国籍是:'.iUser::NATION;}}// 客户端// 访问接口常量,与访问常量一样。echo iUser::NATION;// echo User::write();$user = new User();echo $user->write();
输出:俄罗斯赵忠祥的国籍是:俄罗斯
通过老师的讲解,使我对面向对象有了更深的理解,以前只认为面向对象是为了实现代码复用,其实更重要的就是设计与实现,通过设计与实现来实现抽象到具体,这一过程,面向对象编程如果在实战中能运用好的话,就可以避免很多麻烦,比如一股脑的敲代码,对整体的构造,没有清晰的思路,写到哪就到哪,就永远不会进步。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号