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

本文详细介绍了PHP面向对象编程的基础知识,包括类的声明、实例化、属性、方法、常量、构造方法、析构方法、静态属性与方法、对象克隆、继承、检测对象类型、多态等核心概念。

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就是其多态的表现。






                
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值