PHP----进阶知识----面向对象

本文主要记录一些自己学习过程中遇到的进阶知识,仅做参考。

主要包含的内容:面向对象,设计模式,数据结构与算法。


面向对象:

面向对象和面向过程均为一种编程思想。

面向过程:分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用即可。
面向对象:把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描述某个事物在解决问题的步骤中的行为。
面向对象是相对面向过程的一种编程方式。操作的是一个个的对象,也有自身的优缺点。比如,面向对象在性能上肯定不如面向过程好,毕竟面向对象需要实例化对象,需要消耗cpu和内存。但是优点也是很明显的,毕竟在一个大型的项目里,面向对象更易于维护和管理,条理也清晰,是一种重要的编程思想。

面向对象的四大特征:封装、继承、多态、抽象

  • 封装:把内部的实现隐藏起来,只暴露必要的方法让外部调用。
    将一类事物的属性和行为抽象成一个类,使其属性私有化,行为公开化,提高数据的隐秘性的同时,使代码模块化。这样做使得代码的复用性更高。

  • 继承:进一步将一类事物共有的属性和行为抽象成一个父类,每一个子类是一个特殊的父类----有父类的行为和属性,也有自己特有的行为和属性,这样做扩展了已存在的代码块,进一步提高了代码的复用性。

  • 多态:实现接口重用,解耦–为了解除父子类继承的耦合度。如果说继承中父子类的关系式IS-A的关系,那么接口和实现类之间的关系式为HAS-A。简单来说,多态就是允许父类引用(或接口)指向子类(或实现类)对象。很多的设计模式都是基于面向对象的多态性设计的。

  • 抽象:?????


总结来说,如果说封装和继承是面向对象的基础,那么多态则是面向对象最精髓的理论。掌握多态必先了解接口,只有充分理解接口才能更好地应用多态。


附:面试题答案小结:
面向对象相对于面向过程来说,它从现实世界中客观存在的事物(即对象)出发来构造软件系统,并根据这些事物的本质特点,把它抽象地表示为系统中的基本构成单位,更能接近现实事物本来的特性和面貌。
面向对象的优点:
1,一切皆对象,相对于面向过程编程而言提高了代码的可重用性;
2,面向对象的三个重要特征:封装、继承和多态,提高系统的灵活性与健壮性;
3,面向对象的属性和方法的可访问性提高了程序的安全性,数据调取的多样性。


抽象类与抽象方法

  • 任何一个类,如果它里面至少有一个方法是被声明为抽象的,那么这个类就必须被声明为抽象的;
  • 定义抽象的类不能被实例化;
  • 被定义为抽象的方法只是声明了其调用方式(参数),不能定义其具体的功能实现;
  • 必须在子类中将抽象的全部抽象方法全部实现才可以

代码如下:

<?php

abstract class Person{//类名第一个字母大写,大驼峰命名方法
    public $name;
    public function __construct($name){
        $this->name = $name;
    }
    //被定义为抽象的方法只是声明了其调用方式(参数),不能定义其具体的功能实现。
    abstract protected function hello();

    abstract protected function say();

    public function show(){
        return 'my name is '.$this->name;
    }
}
//
class Worker extends Person{
    //抽象方法的具体实现
    public function hello(){
        return 'Hello'.$this->name;
    }
    public function say(){
        return 'Hello'.$this->name;
    }
}

接口interface
使用接口(interface),可以指定某个类必须实现哪些方法,但不需要定义这些方法的具体内容。
接口是通过interface关键字来定义的,就像定义一个标准的类一样,但是其中定义所有的方法都是空的。
接口中定义的属性是类常量,定义的所有方法都必须是公有的抽象方法,所以public,abstract不必写,这是接口的特性。

<?php

interface Person1{
    //接口中定义的属性必须是类常量
    const SITENAME = 'I love php';
    function show();
    function apply();
}

interface Person2{
    function hello();
}

class Worker implements Person1,Person2{
    public function show(){
        return self::SITENAME;
    }
    public function apply(){
        return 'study php';
    }
    public function hello(){
        return 'hello php';
    }
}

implements与 extends区别
1,在类的声明中,通过关键字extends来创建一个类的子类。一个类通过关键字implements声明自己使用一个或多个接口;
extends是继承某个类,继承之后可以用父类的方法,也可以重写父类的方法,implements是实现多个接口,接口的方法一般为空必须重写才能使用。
2,extends是继承父类,被继承的类不是

关键字功能区别1区别2区别3
extends创建子类,继承某个父类可以使用父类的方法,也可以重写父类的方法被继承的类不是声明为final或者定义为abstract就能继承,不支持多重继承可以实现父类,也可以调用父类初始化this.parent(),而且会覆盖父类定义的变量或函数
implements声明自己使用一个或多个接口实现多个接口,必须重写接口的方法才能使用可以实现多个接口,用逗号分开,比如class A extends B implements C,D,E实现父类,子类不可以覆盖父类的方法或变量,即使子类定义与父类相同的变量或者函数,也会被父类取代掉

Final关键字

PHP5中新增的一个关键字,如果父类中的方法被声明为final,则子类无法覆盖该方法。同样如果一个类被声明为final,则不能被继承。
注意:属性不能被定义为final,只有类和方法才能被定义为final。

范围解析操作符

范围解析操作符(::)可以用于访问静态成员,类常量,还可以用于覆盖类中的属性和方法。

self,parent和static这三个特殊的关键字是用于在类定义的内部对其属性或方法进行访问的。

protected,private与public的区别

publicprivateprotected
可以在程序中的任何位置(类内、类外)被其他的类和对象调用,子类可以继承和使用父类中所有的公共成员被private修饰的变量和方法,只能在所在的类的内部被调用和修改,不可以在类的外部被访问,在子类中也不行用protected修饰的类成员,可以在本类和子类中被调用,但是在其他地方不能被调用
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值