前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >通俗易懂PHP基础【9-类和对象(1)】

通俗易懂PHP基础【9-类和对象(1)】

作者头像
Lemon黄
发布2019-10-08 17:41:27
4210
发布2019-10-08 17:41:27
举报
文章被收录于专栏:Lemon黄Lemon黄
云村故事

曾经见过一个摄影师喂藏羚羊喝水,同行的警察把藏羚羊赶走了,摄影师问为什么,警察说,要不然它会以为人类是善良的。

——出自网易云音乐《动物世界》热评

这一节是基础环节中的最后一篇,但由于内容会有很多,为避免引起不适,这最后的一篇会分成三个小篇来介绍。下面就开始我们这边的主题——类和对象。

1

什么是类和对象

关于什么是类,什么是对象。拿我们自己举例来说,我们属于人类,人类就是类,而具体到每一个人这一个体,都是一个个对象。每个人有不同的肤色,身高,胖瘦等这些特征,是人类都有的特征(也称为属性),除了这些特征之外,人类还有会学习,会思考,会走路等这些行为(也成功能或者方法)。

所以说,类要包含属性和方法的集合,这就相当于一个蓝本,有这个蓝本(人类),赋予不同的属性和方法,就能造出各种各样的对象(人)。

可以说,世间万物都是有自己的属性和方法,通过这些属性和方法来分区各种各样的事物。

当然,类是一个抽象概念(正如人类也是一个抽象的概念),实际应用中还需要对类进行实例化来产生对象,对象是类进行实例化后的具体产物。在面向对象编程中,程序是通过对象,对类中的属性和方法进行引用的。

2

面向对象编程的特点

面向对象编程的特点:继承、封装和多态性。

⒈继承

继承的意思就是,类A 继承 类B,那么类A 就是 子类,类B 就是父类。子类 继承父类,子类就可以继承父类中的属性和方法。这在我们编写代码中,可以让我们减少很多不必要代码量的输出,提高开发效率。

例如,把动物看成一个父类,那么动物类具有毛发和四只脚等属性。再定义一个猫类,在定义猫类时完全可以不定义猫也有毛发和四只脚等属性,通过继承,就可以让猫类也有这些属性。

注意:继承使用的关键字是 extends,看如下实例:

可以看到,我们只在动物类中定义了一个毛发属性,让猫类继承动物类,猫类里面属性和方法都没有声明,但由于继承(使用关键字 extends),猫类可以使用动物类的属性,所以实例化(使用 new 关键字)出一只猫的时候,猫可以使用毛发属性,并输出父类的默认值黑色。

⒉封装:

从上面介绍的,我们知道类是属性和方法的集合,我们在类中定义的一个方法,只需通过实例化出对象来调用这个方法就行了,而不用关心这个方法在类中的具体实现,这就是类的封装性。

封装,让我们只在类中定义一次方法,就可以在需要调用的地方,通过实例化出对象来调用方法,而不用再需要方法的地方都要重写一遍代码。封装,也是可以提高开发效率的。

就像一台电视,我们只知道怎么打开和关闭这个功能就行了,而不需要我们知道电视的内部它是怎么实现打开和关闭的功能。

⒊多态

多态性指的是不同的类进行相同的操作会有不能的表现。例如:定义一个为猫类和一个动物类,猫类和动物类都有会吃的行为,说明两者在这方面可以进行相同的操作,然而人类和猫类吃的行为是截然不同的,人类可以拿筷子吃,而猫类不会,有相同吃的操作,但是吃的方法不一样,可以说是多态的形象比喻了。

3

类的创建

类只有声明,对象才有产生的意义。可以说类是面向对象编程的核心基础,是属性和方法的集合。

但在编码中,类必须实例化出对象这一引用才能被使用。

创建类,必须使用关键字class进行声明,该关键字后紧跟类的名称,之后用大括号将类体进行封装。

类体(大括号里)中包括属性和方法的声明及定义,当然也可能在类体中只定义属性或只定义方法,甚至类体内可以不定义任何属性。

完整的类基本的定义格式如下:

代码语言:javascript
复制
<?php

class ClassName{
    //属性
    public $attribute;
    //定义类方法
    public function funcName(){ 
        //定义该方法所要实现的功能
    }
}

?>

属性:类的属性实质为在类体内定义的变量,用于保存或设置参数。

方法:类的方法实质为在类体内定义的函数,用于实现某项功能,其定义方法与普通函数定义方法相同,同时可以应用访问权限关键字( public protected private )对方法访问权限进行限制。

4

构造函数的使用

对类体进行一些初始化操作有两种方法。

第一种方法是在类中我们自定义初始化。

第二种方法就是使用PHP已经在类中定义的析构函数。下面我们分别使用这两种方法来看看:

第一种:自定义初始化方法

代码语言:javascript
复制
<?php

class Student{
  public $grade;//班级
  public $name;//姓名
  public $age;//年龄
 
  public function setStudent($grade,$name,$age){   //属性初始化
    $this->grade=$grade;
    $this->name=$name;
    $this->age=$age;
  }
 
  public function printStudentInfo(){  //输出学生信息
    echo "班级:".$this->grade;
    echo "姓名:".$this->name;  
    echo "年龄:".$this->age."岁";  
  }
}
$student=new Student();
$student->setStudent("二年级","小明","7");   //初始化类的内部成员
$student->printStudentInfo();            //输出结果
?>

运行结果为:班级:二年级姓名:小明年龄:7岁

第二种方法:使用析构函数

代码语言:javascript
复制
<?php

class Student{
  public $grade;//班级
  public $name;//姓名
  public $age;//年龄
 
  public function __construct($grade,$name,$age){   //属性初始化
    $this->grade=$grade;
    $this->name=$name;
    $this->age=$age;
  }
 
  public function printStudentInfo(){  //输出学生信息
    echo "班级:".$this->grade;
    echo "姓名:".$this->name;  
    echo "年龄:".$this->age."岁";  
  }
}
$student=new Student("二年级","小明","7");
$student->printStudentInfo(); //输出结果
?>

运行结果为:班级:二年级姓名:小明年龄:7岁

__construct() 是PHP中构造函数统一的命名,它会在类被实例化成(new xx())对象时自动被调用。

从上面两种方法的对比,通过构造函数来初始化。,当对类实例化出的对象进行初始化时,就位析构函数指定了参数。

注:构造函数是在对类体进行实例化时自动调用的。

5

析构函数的使用使用析构函数

与构造函数对应的是析构函数。

析构函数是在销毁类之前执行,并统一命名__destruct(),其作用是在类被销毁前自动完成某项功能。

实例 see see :如下常用的数据库连接,在我们使用完毕数据库相关操作后,都需要销毁数据库连接占用的资源。如下代码仅供说明,无法运行使用。

代码语言:javascript
复制
<?php
class conn{
  public $host; //主机名
  public $username;//数据库用户名
  public $password;//密码
  public $conn;
  
  public function __construct($host,$username,$password){    //应用构造函数对类体中的属性进行初始化
    $this->host=$host;
    $this->username=$username;
    $this->userpwd=$password;
  }
 
  public function getConn(){      //建立数据库的连接
      $this->conn=MySQL_query($this->host,$this->username,$this-password);
      return $this->conn;
  }
  public function __destruct(){   //应用析构函数自动释放连接资源
      MySQL_close($this->conn);
  }
}
?>

这一小节先就介绍到这里,编写不易,不知道想学编程的你能不能看得懂,有疑问就跟我说吧,毕竟第一次想要坚持写关于PHP的编程知识,想能面面俱到而又能通俗易懂实属不易,但愿我们都能越做越好。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-09-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Lemon黄 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档