php面向对象及特征

来源:互联网 发布:11月经济数据点评 编辑:程序博客网 时间:2024/06/05 07:33

OOA :分析        OOD:设计        OOP:编程

什么是对象?

万物皆对象

类:类是对象的抽象,对象是类的实例,类是具有相同属性和行为的一组对象的集合

(Class)是用来描述一个对象(Object)

类描述了每个对象应包括的数据

类描述了每个对象的行为特征
创建类:

PHP 中使用关键字 class 来定义一个类。类的命名一般使用首字符大写,而后每个单词首字符大写连接的方式方便阅读。

class Person{
    public $id;            //序号
    public $name;     //姓名
    public $birth;      //生日
    public $sex;        //性别
}

 

类中的一个成员变量由如下部分组成:

访问修饰符。可以是publicprivateprotected

成员变量名称。成员变量名称必须是一个有效的标识符,后面用分号结束。

类由属性和行为组成

 

面向对象的三大特征

 

1 封装

2 继承

3 多态

 

封装:把对象的属性行为(类)结合成一个独立的相同单位,并尽可能隐蔽对象的内部细节

所有的函数和方法都是封装,类也是封装(封装的是行为和属性)访问修饰符:public  private  protected也是封装

 

优点:

1 信息隐蔽,封装即是隐藏。

2 封装的原则在软件上反映的是:要求使对象以外的部分不能随意取对象的内部数据(属性),从而有效的避免了外部错误对它的“交叉感染”,使软件错误能够局部化,大大减少查错和排错的难度。

 

类的封装带来的优点:隐藏类的实现细节,让使用者只能通过事先定义好的方法来访问数据,可以方便的加入逻辑控制,进行数据检查,限制对属性的不合理操作。便于修改增强代码的可维护性。

 

什么是继承?

继承:(传承/扩展)

继承是面向对象最重要的特点之一,就是可以实现对类的复用。

PHP是单继承的,一个类只可以继承一个父亲,但一个父亲却可以被多个子类所继承。

 

继承:  扩展父类的内容,注意只能继承public和protected修饰的内容,而private修饰的则不能继承


关键字: extends


PHP中继承是单继承,即extends后面只能有1个类名;但是1个类可以有无数个子类


子类和父类只能出现在有继承关系的2个类之间

 

面向对象编程---重写

在子类中出现和父类同名的方法,称为重写
行为的重新定义
重写只能发生在有继承关系的类之间,方法名称相同即重写,与参数没有关系

重写时,访问修饰符的可以访问范围不能低于父类中的访问修饰符

对于private修饰对的方法不能重写

 

 

 

如果从父类继承的方法不能满足子类的需求,

 

this 代表其所在当前对象

 

Parent::的追溯不仅于直接父亲(如果在直接的父类中没有出现重写的方法,它会向上查找与自己同名的方法)

 

 

面向对象——多态(“变态”-变化的形态)

接口(interface):是抽象方法和静态常量定义的集合。

接口是一种特殊的抽象类,这种抽象类中只包含抽象方法和静态常量(不能改变的量)。

接口中没有其它类型的内容。

 

接口的定义

Interface 接口名{
public function getName();

}

在接口中的抽象方法只能是public,默认也是public权限。并且不能设置成private或者protected类型

 

接口:它是一个特殊的类,但是名称变成了interface
在接口中定义的只能是公共的抽象方法(没有函数体部分),也可以有静态常量
接口采用的插件式配置,可以随意的匹配任意一个类
类可以实现(implements)接口,实现的接口可以有无数个
当1个类实现了接口后,该接口的所有方法必须在该类中实现

接口:提供行为的规范

 

关键字:

Final:最终的、最后的

final 关键字,意思是终态的,最后的
它可以修饰函数方法,被修饰的函数方法不能被重写
final可以修饰类class,但修饰的类不能被继承
类当中的属性不能被final修饰

 

eg:

class AA{
    private$num;
    public final functiontest(){
        echo'测试代码';
    }
    public functiontest2(){
        echo'测试代码2';
    }
}

 

static  静态的
它可以修饰属性变量,也可以修饰函数方法
静态资源的加载和普通的非静态资源的加载是不一样的
在非静态方法中可以调用静态方法,但是反过来就不行
静态static修饰的内容被创建不需要有对象存在,同时它们是被放置在静态区域当中
静态资源的标准访问方式是===>类名::静态资源名称

 

eg:

class AAA{
    public static$num;

    public function__construct(){
        $this->ceshi();
    }
    public functionteststatic(){
//        $this->ceshi();
        
echo'我是非静态的函数方法 ';
    }

    public functionjiafa(){
    AAA::$num++;
    }

    public static functionceshi(){
//        echo '我是静态的函数方法 ';
//        $this->teststatic();
    
}
}
$aaa = newAAA();
$aaa->jiafa();
$aaa = null;
echo'第一次输出'.AAA::$num;
echo'<br><br>';
$aaa2 = newAAA();
$aaa2->jiafa();
echo'第二次输出'.AAA::$num;

//AAA::ceshi();

//$aaa = new AAA();
//$aaa->ceshi();

 

 

method_exists:检查类是否存在

 

区别:

Require();

Require_once();

 

Include();

Include_once();

 

 

0 0
原创粉丝点击