面向对象程序设计

什么是面向对象?主要特征是什么?
面向对象是程序的一种设计方式,它利于提高程序的重用性,使程序结构更加清晰。
主要特征:封装、继承、多态。

设计模式
简单来说,设计模式就是解决某个问题的一般性代码的经验总结。
设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性、程序的重用性。

单例模式
单例模式是指整个应用中某个类只有一个实例,而且自行实例化并向整个系统全局的提供这个实例的设计模式。
三私一公:私有的静态变量(存放实例),私有的构造方法(防止创建实例),私有的克隆方法(防止克隆对象),公有的静态方法(对外界提供实例)。

<?php
/* *
* 设计模式之单例模式
* $_instance必须声明为静态的私有变量
* 构造函数必须声明为私有,防止外部程序new类从而失去单例模式的意义
* getInstance()方法必须设置为公有的,必须调用此方法以返回实例的一个引用
* ::操作符只能访问静态变量和静态函数
* new对象都会消耗内存
* 使用场景:最常用的地方是数据库连接,如果每次操作的时候连接数据库,会带来大量的资源消* 耗。可以通过单例模式,创建唯一的数据库连接对象。
*/
class man
{
    //保存例实例在此属性中
    private static $_instance;
    //构造函数声明为private,防止直接创建对象
    private function __construct(){}
    //阻止克隆对象实例
    private function __clone(){}
    // 单例方法
    public static function getInstance(){
        if(!isset(self::$_instance)){
            self::$_instance= new self();
        }
        return self::$_instance;
    }
    function test(){
        echo("test");
    }
}
$man = man::getInstance();
$man->test();

抽象类和接口
抽象类:
1、抽象类的定义跟普通类的定义一样,只不过前面加了一个关键字abstract。
2、抽象类不是用来实例化的,抽象类存在的目的为了让子类继承。
3、抽象类里面可以没有抽象方法,如果有子类必须实现,否则就报错。
4、抽象方法只能是public或者protected。
5、抽象类可以继承抽象类,子类在实现的时候所有的抽象方法都得实现。

什么情况下可以考虑用抽象类:
1、定义了一组接口,又不想强迫每个实现类都必须实现所有的接口。
2、某种场合下,只靠纯粹的接口不能满足类与类之间的协调,还必须类中表示状态的变量来区分不同的关系。

接口:
1、接口定义用interface,类实现用implements.
2、接口中的方法都是抽象方法,abstract可以省略不写。
3、接口中的方法必须是public。
4、接口中只能规定方法,不能写属性(接口中可以写常量)。
5、一个类可以实现多个接口,中间用逗号隔开。
6、一个类可以先继承父类,然后再实现接口。
7、接口可以继承接口,但是里面的方法都要实现。

什么情况下可以考虑用接口:
1、项目经理定接口规范,让程序员必须严格按接口实现。
2、当多个类,他们之间是平级关系,这些类都会去实现某个功能,只是实现方式不一样。

self、static、this区别
self:self引用的是当前类,也就是self所在的类,可以访问静态属性和静态方法。
static:延迟静态绑定,运行时绑定调用类。
this:this调用的是实例化对象,不可以调用静态属性和静态方法。

private、protected、public、final 区别
public(公有):权限是最大的,可以内部调用,实例调用等。
protected(受保护):受保护类型,用于本类和继承类调用。
private(私有):私有类型,只有在本类中使用。
final:final关键字可以终止类的继承,final类不能有子类,final方法不能被覆写。

Trait是什么东西
Trait是一个关键字,和class一样,它的出现主要是解决php不能多继承的问题,为单继承语言而准备的一种代码复用机制。Trait不能被实例化,非继承,通过use引入。

静态(static)关键字
声明类属性或方法为静态,就可以不实例化类而直接访问。静态属性不能通过一个类已实例化的对象来访问(但静态方法可以)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值