PHP的面向对象


每日一记

类与对象

类 − 定义了一件事物的抽象特点。类的定义包含了数据的形式以及对数据的操作。
对象 − 是类的实例。
对象的主要三个特性:
1.对象的行为:可以对对象施加那些操作,开灯,关灯就是行为。
2.对象的形态:当施加那些方法是对象如何响应,颜色,尺寸,外型。
3.对象的表示:对象的表示就相当于身份证,具体区分在相同的行为与状态下有什么不同。

面向对象

概念

成员变量 − 定义在类内部的变量。该变量的值对外是不可见的,但是可以通过成员函数访问,在类被实例化为对象后,该变量即可称为对象的属性。

成员函数 − 定义在类的内部,可用于访问对象的数据。

继承 − 继承性是子类自动共享父类数据结构和方法的机制,这是类之间的一种关系。在定义和实现一个类的时候,可以在一个已经存在的类的基础之上来进行,把这个已经存在的类所定义的内容作为自己的内容,并加入若干新的内容。

父类 − 一个类被其他类继承,可将该类称为父类,或基类,或超类。

子类 − 一个类继承其他类称为子类,也可称为派生类。

多态 − 多态性是指相同的操作或函数、过程可作用于多种类型的对象上并获得不同的结果。不同的对象,收到同一消息可以产生不同的结果,这种现象称为多态性。

重载 − 简单说,就是函数或者方法有同样的名称,但是参数列表不相同的情形,这样的同名不同参数的函数或者方法之间,互相称之为重载函数或者方法。

抽象性 − 抽象性是指将具有一致的数据结构(属性)和行为(操作)的对象抽象成类。一个类就是这样一种抽象,它反映了与应用有关的重要性质,而忽略其他一些无关内容。任何类的划分都是主观的,但必须与具体的应用有关。

封装 − 封装是指将现实世界中存在的某个客体的属性与行为绑定在一起,并放置在一个逻辑单元内。

构造函数 − 主要用来在创建对象时初始化对象, 即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中。

析构函数 − 析构函数(destructor) 与构造函数相反,当对象结束其生命周期时(例如对象所在的函数已调用完毕),系统自动执行析构函数。析构函数往往用来做”清理善后” 的工作(例如在建立对象时用new开辟了一片内存空间,应在退出前在析构函数中用delete释放)。

解析
【定义函数】
<?php                                      //1.定义类
class 类名 {
  /* 成员变量 */
  var $var1;
  var $var2 = "constant string";
  /* 成员函数 */
  function 成员函数的函数名 ($arg1, $arg2) 
  {
      return $this->函数 = 变量             //赋值并调用函数
  }
}
?>
$对象名 = new 类名;                         //2.创建对象
echo $对象名->成员函数("传入的参数");        //3.调用成员方法

大括号{}内可以定义变量和方法
变量使用 var 来声明, 变量也可以初始化值
函数定义类似 PHP 函数的定义,但函数只能通过该类及其实例化的对象访问。
变量 $this 代表自身的对象


【构造函数】
在创建对象时, 即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中。
<?php
class 类名 {
   function __construct() {
       print "构造函数";
       $this->name = "";
   }
   function __destruct() {
       print "销毁" . $this->name . "\n";
   }
}
$obj = new 类名();
?>

【继承】
子类继承父类的特征和行为,使得子类对象具有父类的属性和方法,或子类从父类继承方法,使得子类具有父类相同的行为(父类=基类)
<?php 
// 子类扩展站点类别
class 类名 {           //extends继承一个类
   var $category;
    function setCate($par){
        $this->category = $par;
    }
    function getCate(){
        echo $this->category . PHP_EOL;
    }
}
注意:PHP 不支持多继承

【方法重写】
顾名思义重新定义function

【访问控制】
PHP 对属性或方法的访问控制,是通过在前面添加关键字 public(公有)
protected(受保护的)只能被自身子父类访问
private(私有的)只能被定义的类访问
publice(公有的)可以在任何地方访问
类属性必须被定义,var视为publice

【接口】
概念:指定某个类必须实现哪些方法,但不需要定义这些方法的具体内容。
特性:通过interface定义,但是其中定义的所有方法都必须是公有而且要是空的。
类可以实现多个接口,用逗号来分隔多个接口的名称。

【常量】
在类中始终保持不变的值定义为常量。在定义和使用常量的时候不需要使用 $ 符号。
常量的值必须是一个定值

【接口与抽象类】
1. 接口
(1)对接口的使用是通过关键字implements
(2)接口不能定义成员变量(包括类静态变量),能定义常量
(3)子类必须实现接口定义的所有方法
(4)接口只能定义不能实现该方法
(5)接口没有构造函数
(6)接口中的方法和实现它的类默认都是public类型的
2. 抽象类
(1)对抽象类的使用是通过关键字extends
(2)不能被实例化,可以定义子类必须实现的方法
(3)子类必须定义父类中的所有抽象方法,这些方法的访问控制必须和父类中一样(或者更为宽松)
(4)如一个类中有一个抽象方法,则该类必须定义为抽象类
(5)抽象类可以有构造函数
(6)抽象类中的方法可以使用private,protected,public来修饰。
(7)一个类可以同时实现多个接口,但一个类只能继承于一个抽象类。

【关键字】
1.Static
(1)声明类属性或方法为 static(静态),就可以不实例化类而直接访问
(2)静态属性不能通过一个类已实例化的对象来访问(但静态方法可以)。
(3)由于静态方法不需要通过对象即可调用,所以伪变量 $this 在静态方法中不可用。
(4)静态属性不可以由对象通过 -> 操作符来访问。
2.Final
(1)如果父类中的方法被声明为 final,则子类无法覆盖该方法。
(2)如果一个类被声明为 final,则不能被继承。

【调用父类构造方法】
PHP 不会在子类的构造方法中自动的调用父类的构造方法。
要执行父类的构造方法,需要在子类的构造方法中调用 parent::__construct() 

面向对象暂时先写到这里,后面有新的认识再回来更改。

每日一句

当废话满天飞的时候,沉默是人类最大的贡献。

评论
  目录