二、类与面向对象

2.1 类和对象

类是面向对象程序设计的基本概念,是一类东西的结构描述,而对象是一类东西的具体实例,类与对象看起来比较相似,实际有本质上的区别,类是抽象的概念,对象是具体的实例。类使程序具有可重用性。

类名必须是字母或下划线开头,后面紧跟若干个字母、数字或下划线,类名最好能够表意,可以采用名词或者英文单词。

类的定义:

class 类名{
    访问修饰符 变量名="值";
    访问修饰符 function 方法名{
        //方法内部可以使用$this伪变量调用对象的属性或者方法
        return $this->变量名;
    }
}

对象的实例化:

$对象名=new 类名();
$对象名->属性名;//读取对象属性
$对象名->类名();//调用对象的方法

在类使用static关键字标记的方法叫静态方法,用static关键字的属性叫静态属性,静态方法和静态属性的使用不需要实例化对象,可以使用类名加双冒号

class Test{
    public static $name="test name";
    public static function testFunc(){
        return "testFunc";
    }
}
//使用静态属性
echo Test::$name;
//调用静态方法
echo Test::testFunc();

2.2 创建一个对象

使用关键字 new 来创建对象

$实例名=new 类名();
//变量来创建
$className="类名";
$实例名=new $className;

2.3 类的属性

类和对象的属性:

在类中定义的变量称为属性,通常属性跟数据库中的字段有一定关联,因此也可以称之为字段。属性声明由关键字public、protected、private开头,后面跟一个普通变量的声明来组成,属性的变量可以设置初始化的默认值,默认值必须是常量。

访问控制关键字:

public:公开的,创建的实例可以使用类中的方法或变量

protected:受保护的,只有本类或父类和子类可以访问

private:私有的,只有当前类可以访问

默认情况下都是public,一般通过 -> 对象操作符来访问对象的属性和方法,对于静态属性使用::双冒号进行访问,在类成员方法内部调用的时候,可以使用关键字 $this 伪变调用当前对象的属性

2.4 定义类的方法

在面向过程的程序设计中function叫做函数,在面向对象的程序设计中function被称之为方法。

同属性一样,方法也具有 public、protected、private访问控制。

使用关键字static修饰的方法称之为静态方法,静态方法不需要实例化对象,可以通过类名直接调用,操作符号为双冒号::

2.5 构造函数和析构函数

php5中可以在类中使用 __construct() 定义一个构造函数,具有构造函数的类,在每次实例化的时候都会调用该方法,因此常用来进行一些初始化工作。

在子类中定义了 __construct() 就不会调用父类的构的造方法,若需要调用父类的构造函数,则需要使用 parent::__construct() 显式调用。

在php5中支持析构函数。使用 __destruct() 定义,析构函数指当对象的所有引用被删除,或者对象被显式销毁时被被执行的函数。

当php代码执行完毕后,会自动回收销毁对象,因此一般情况不需要显式的去销毁对象

2.6 Static静态关键字

静态属性和方法在不实例化的情况下调用,使用 类名::方法名调用

静态属性不允许对象使用->操作符调用
静态方法中 $this 伪变量不能使用,可以用 self,parent 关键字在内部调用静态方法与属性

2.7 访问控制

类里面的方法和属性必须定义为公有、受保护、私有,为兼容php5之前版本采用var 定义属性均被视为公有

如果构造方法定义成了私有,则不允许直接实例化对象,这时候一般通过静态方法进行实例化,在设计模式中经常使用这样的方法来控制对象的创建,比如单例模式中只允许有一个全局唯一的对象。

2.8 对象继承

类的继承使用关键字extends,使用 parent::方法名()parant::变量名调用和使用父类的方法和变量

 class 子类名 extends 父类名{

}

2.9 重载

使用方法 __call来实现重载,当调用不存在的方法时,会调用到 __call方法,

__call($name, $args)

通过判断重载方法的 $name值确定调用方法

2.10 对象的高级特性

使用比较运算符==判断两个实例的所有属性是否相等

使用全等运算符===判断是否为同一个对象

使用系统方法serialize把对象序列化成字符串,用于存储或者传递数据

使用系统方法unserialize把字符串反序列化成对象

最后修改:2019 年 03 月 01 日
如果觉得我的文章对你有用,请随意赞赏