php面向对象编程--学习笔记

来源:互联网 发布:软件方案怎么写 编辑:程序博客网 时间:2024/05/17 23:26

Php面向对象的程序编程

1.声明一个类

php中使用class关键字创建一个新类,类包括属性与方法。语法格式如下:

<?php class类名{  属性;  方法; }?>


2.创建一个实例对象

创建对象的过程称为实例化,对象被创建时就包含3个特性:对象句柄,对象属性,对象方法;

对象句柄:用于区分不同的对象。对象创建好了就会获取一块存储空间,存储空间的地址即为对象的标识,也就是对象的句柄。

对象属性:用于描述对象的静态特征。

对象方法:用于描述对象的动态特征。

如果要创建一个新的且唯一的对象,可使用'&'引用符号。例如:

<?php $对象名称 = new &类名称();?>


当类实例化后,可以使用操作符'->'来调用对该对象的属性和方法。

3.类的属性与方法

属性的声明:关键字成员变量名;

关键字可以是public,private,protected,static中的任意一个,默认是public

4.类的常量

常量使用const关键字来定义一个类的常量。类常量不与这个类的任何特定实例相关联,所以不可以使用间接引用操作符来访问它们。类常量通常要大写,如果多个类常量由多个单词组成,建议使用下划线将它们分开。

5.类的构造方法和析构方法

构造方法:一个类中只能有一个构造方法,构造方法不会被调用,只有在使用new关键字创建对象的时候才会调用构造方法。

例如:

<?php class类名{  function__construct(){   初始化语句;  } }?>


在工作中,也可以调用和实例化对象没有任何关系的类构造函数,只须在__construct前面加上类名,例如:类名::__construcr();

析构方法:析构方法与构造方法是相对的,它在某个对象中的所有引用都被删除或对象被显式销毁时执行。

例如:

<?php  class类名{   function __destruct(){   初始化语句;   }  }?>


脚本执行结束时,PHP会撤销内存中的所有对象,因此,如果实例化的类和实例时创建的信息都留在内存中,就不需要显示地声明析构函数。但是,如果实例化时创建了不容易丢失的数据,就应该在对象撤销时撤销这些数据,因此就需要定制析构函数。

6.静态属性与方法

将类中的属性与方法声明为静态的就叫做静态方法。静态方法不受任何具体对象的限制,所以不需要建立实例就可以直接引用类中的静态方法。

调用方式:类名称::静态方法名称

注释:'::'符号称为范围解析操作符,它可以用于访问静态成员,静态方法和常量,还可以用于覆盖类中的成员和方法。例如:

<?php  class sta_num{   static$num=0;  }  sta_num::$num++;?>


如果想在同一类的成员方法中访问静态属性,可以通过在该静态属性的名称前加上操作符'self::'来实现。

例如:

<?php  class sta_num{   static$num=0;   function add(){    self::$num++;   } } sta_num::$num++;?>


7.对象的克隆

通过clone后可以得到的对象与原来的对象没有任何关系,它把原来对象的所有信息从内寻的位置中复制了一份,然后在内存中又开辟一个空间来存储克隆后的对象。例如:

<?php calss a{} $ojectA= new a(); $objectB= clone $objectA;?>


如果在对象中定义了_clone方法,则可以在对象被克隆时来调整克隆行为,此方法的代码将在克隆的操作期间来执行。

8.继承

PHP中,使用extends关键字来建立一个类的继承。格式如下:

class 子类名称 extends 父类名称{  子类属性;  子类方法;}


当子类要调用父类的成员方法时需要用到关键字'patent::',例如:

parent::父类的成员方法

9.检测对象的类型

php中可以使用instanceof运算符来检测当前对象是否属于同一个类。

10.多态

1)通过继承抽象类实现多态

抽象类里面至少包含一个由关键字abstract修饰的抽象方法,抽象方法是不实现具体方法的空方法。抽象类不能被实例化,只能由子类去继承,然后在继承的子类中完成具体功能。

例如:

<?php abstract class work{  abstract function work_name($name); } class man extends work{ function work_name($name){  echo$name.'is true'; }}class woman extends work{ function work_name($name){  echo $name.'is false'; }}?>


对于work类而言manwoman就是它多态的表现。

2)通过接口实现多态

接口是一组成员方法声明的集合,它只包含一些空的成员方法或常量,这些空的成员方法将由实现该接口的类去实现。定义一个接口需要使用interface声明,定义接口的方法如下:

interface 接口名称{ 类常量; function 成员方法_1; function 成员方法_2;}

在接口中不存在构造方法和析构方法,接口可以被继承,它可以继承多个接口,而不能继承一个类。接口的实现需要使用关键字implements。当使用类来实现接口时,必须包含接口定义的所有方法,否则在运行时会出现错误。例如:

<?php  interface people{   function favourate_sport();  }  class  children implements people{  function favourate_sport(){  方法体;  } } class student implements people{   function favourate_sport(){    方法体;   } }?>


对于接口people而言,类childrenstudent就是其多态的表现。