PHP面向对象编程(1)基础

一、面向对象OOP(Oriented Object Programming)

  1.   面向过程的编程
    • 将要实现的功能描述为一个从一开始到结束的连续的“步骤(过程)”。
    • 一次逐步完成这些步骤。如果步骤比较大,又可以将该步骤细分为子步骤,以此类推。
    • 程序从头开始执行一直到结尾并得到手续的结果。

  2.  面向对象的编程

    • 将要实现的功能描述为一个“对象/物体”完成的任务一一实现也是如此:功能的实现都是依赖于一个实体的“行动/操作/动作”。
    • 完成该最终功能的过程中需要实现其他中间功能(过程)则再去调用其他对象来实现该中间功能
    • 整个系统的完成看做是一个一个对象在发挥各自的“能力”并在内部进行协调有序的调用过程。

  3.  基本概念

    1).类和对象

    • 类:类是现实世界或思维世界中的实体在计算机中的反映,它将数据以及这些数据上的操作封装在一起。
    • 对象:对象是具有类类型的变量。类和对象是面向对象编程技术中的最基本的概念。
    • 关系:类是对象的抽象,而对象是类的具体实例。类是抽象的,不占用内存,而对象是具体的,占用存储空间。类是用于创建对象的蓝图,它是一个定义包括在特定类型的对象中的方法和变量的软件模板。

    2).类中成员

      (1)、一般属性

      • 属性是定义在类中的变量
      • 定义:[访问修饰符] $变量名 [= 赋值(初值)];//赋值只能是一个“直接值”或常量
      • 使用形式:对象名->$变量名

      

      (2)、一般方法

      • 属性是定义在类中的函数
      • 定义:[访问修饰符] function 函数名(形参 1, 形参 2, ...) {语句块} 
      • 使用形式:对象名->函数名
      • 方法中$thisi关键字有特定含义:表示调用该方法的对象
      • 获取$this的所属类:get_class($this)

      (3)、静态属性

      • 仅隶属于类,通过类名直接使用
      • 定义:[访问修饰符] static $静态属性名 [= 赋值(初值)];//赋值只能是一个“直接值”或常量
      • 使用形式:类名::$静态属性名

      (4)、静态方法

      • 仅隶属于类的函数,通过类名直接调用(新版php可以使用对象名来调用)
      • 定义形式:[访问修饰符] static function 静态方法名(形参 1, 形参 2, ...) {语句块} 
      • 使用形式:类名::静态方法名(实参 1, 实参 2, ...);//实参和形参一一对应
      • self关键字:用在方法中,表示该方法所在的类
      • static关键字:代替self关键字的位置,除了具有self作用外,还具有更灵活的作用,那就是所谓的“后期静态绑定”
      • 注意1:$this在静态方法中不能使用
      • 注意2:静态方法不能调用非静态方法
      • 注意3:静态方法不用使用非静态属性

      (5)、类常量

      • 隶属于类的常量
      • 定义形式:const 常量名 = 初值;//必须赋值
      • 使用:类名(对象名)::常量名

    3)、示例:

<?php
//定义一个类:圆
class circle {
    const PI = 3.14;//常量PI
    private $radius = 1;//半径

    //设置半径
    public function setRadius($radius) {
        $this->radius = $radius;
    }
    
    //计算圆的面积并返回结果
    public function area() {
        return circle::PI*$this->radius*$this->radius;
    }
    
    //返回常量PI的静态函数
    public static function displayPI() {
        return circle::PI;
//        return $this->radius;//error不能调用非静态属性
    }
    
    //显示半径对应圆面积信息
    public function display() {
        echo "半径是".$this->radius."的圆的面积为:".$this->area()."<br />";
    }
}

//测试
$cir1 = new circle();
$cir1->setRadius(3);
$cir1->display();
echo "PI:".circle::displayPI()."<br />";

?>

 

posted on 2018-12-04 09:41  g2zh  阅读(337)  评论(0编辑  收藏  举报