面向对象笔记1、类 对象 常量 $this self parent 静态 最终 抽象

1.面向过程与面向对象理解

1.1.面向过程的编程思想

  • 面向过程是以过程(步骤)为中心的编程思想
  • 例如:递归思想、冒泡思想、二分法查找
  • 解决一个大问题,先把大问题分解成一个个小问题,再把小问题一个个解决,最终大问题解决了

1.2.面向对象的编程思想

  • 面向过程是以事物(对象)为中心的编程思想
  • 面向过程着重与做什么,面向对象着重于谁来做

总结:面向对象适合大项目(人多),面向过程适合小项目(人少)。

2.类和对象的关系

  • 现实中,先有对象,后有类
  • 在计算机中,先有类,后有对象

2.1类的概念

  • 类就是分类、类别、概念、理论,无形的、看不见、摸不着、不存在
  • 类由相同属性和方法构成
  • 一个类可以产生千千万万个对象

2.2对象的概念

  • 对象就是一个个的实体。有形的、存在的
  • 对象也是由属性(特征)和方法(行为)构成

3.类的定义

语法格式说明:

  1. class是声明类的关键字,不区分大小写;
  2. 类名、函数名、关键字、都不区分大小写;
  3. ClassName是类的名称,类名的命名规则与变量已有,但不带$符号;
  4. 类名可以由字母、数字、下划线构成;
  5. 类名不能以数字开头,但可以以字母、下划线开头
  6. 类名一般用“驼峰式”命名;
  7. 类名后部分小括号();
  8. 大括号{}定义的是类的成员属性和成员方法。
//例:定义一个学生类
class Student{
    //成员属性
    public $name="神乐";
    public $sex="70";
    //成员方法
    public function showInfo(){
        echo "{$this->name}的年龄是{$this->sex}岁!";
    }
}

4.定义类的成员属性

  • 类中只有两个内容,分别为:成员属性和成员方法。类的成员就是对象,又称“对象属性”和“对象方法”

4.1成员属性介绍

  • 成员属性:就是普通变量
  • 成员属性和普通变量的区别:
  • (1)成员属性一定要有前提,就是“谁的属性”,普通变量一般都是全局变量;
  • (2)成员属性一定要加权限控制符,而普通变量不需要

4.2定义格式

  • 权限控制符 变量名 = 变量值;
  • 可以给变量制定默认值,也可以没有

4.3访问修饰符

主要用来保护数据的安全

修饰符 说明
public(公共权限) 在任何地方可以访问,主要指类内部、类外部,子类中都可以访问
protected(受保护的权限) 只能在本类中、子类中访问,在类外不能访问
private(私有的权限) 只能在本类中访问,在类外、子类中都无权访问

5.定义类的成员方法

5.1成员方法介绍

  • 成员方法:就是普通函数
  • 成员方法与普通函数的区别:
  • (1)成员方法,一定是某个对象的方法,不能单独存在
  • (2)成员方法要加权限控制符,普通函数不需要加
  • (3)成员方法可以省略权限控制符,默认为public,建议不要省略
  • 成员方法和普通函数一样,都有返回值和参数

5.2定义格式

权限控制符 function funName(形参1,形参2,…){
//该方法的功能代码;
[return 参数]
}

6.创建类的实例对象

6.1实例对象含义

  • 类可以产生N多个对象
  • 类几乎不占用内存,但每个对象都要占内存
  • 平常只有对象才可以帮我们做工作,而不是类
  • 在js中,创建类的对象的方法:var obj=new Student();
  • 在PHP中,创建类的对象的方法:$obj = new Student();
  • 使用new关键字来创建类的对象
  • 对象不能单独存在,对象必须属于某个类。没有类,一定没有对象

6.2定义格式

//创建类的对象的语法(类的实例化)
$obj=new ClassName;//无参数 无括号
$obj=new ClassName();//无参数 有括号
$obj=new ClassName(实参1,实参2,...);//有参数 有括号

7.对象属性的操作

7.1访问对象的属性和方法

  • 在js中、访问对象的属性和方法,使用小数点来访问:document.write()
  • 在PHP中,访问对象的属性和方法,使用箭头->来访问:obj>nameobj->name、obj->showInfo()
  • obj>obj->name表示访问$name变量值的属性
  • obj访obj访问属性,属性不加符号

7.2对象属性的操作:增加、删除、修改、读取

//类的实例化
$obj=new Student();
//1.修改对象属性:对已存在的属性重新复制
//$obj->$name表示访问$name变量值的属性
//$obj访问属性,属性不加$符号
$obj->name="kakura";
//2.添加新属性:给不存在的属性赋值
$obj->cartoon="银魂";
//3.删除属性
unset($obj->name,$obj->sex);
//4.读取对象属性的值
echo "{$obj->name}的年龄是{$obj->sex}岁!";

8.伪变量$this

  • PHP中$this代表当前对象,用来调用对象的属性和方法
  • $this只能在成员方法中存在,其他地方都不能使用
  • $this对象是怎么来的?当使用$obj对象调用成员方法时,自动将当前对象$obj传递到成员方法中,在成员方法中,使用$this变量来代替传递过来的$obj变量
//例:定义一个学生类
class Student{
    //成员属性
    private $name="神乐";
    private $sex="70";
    //私有的成员方法:返回一条水平线
    private function showLine(){
        return '<hr/>';
    }
    //成员方法
    public function showInfo(){
        $str="<h2>{$this->name}的基本信息如下:</h2>";
        $str.=$this->showLine();
        $str.= "{$this->name}的年龄是{$this->sex}岁!";
        echo $str;
    }
}
$obj=new Student();
$obj->showInfo();

9.self关键字

- $this slef
代表 代表当前对象 代表当前类
调用 调用对象的 成员属性、成员方法 调用类的 类常量、静态属性、静态方法
符号 使用箭头->调用 使用双冒号::调用
位置 只能在成员方法中使用 可用在成员方法,静态方法中

以下代码可对比上一个代码:

class Student{
    //公共的静态方法
    public static $title="<h2>club</h2>";
    //私有的静态方法
    private static function showLine(){
        return "<hr/>";
    }
    //公共的成员方法
    public function showInfo($name,$age){
        $str=self::$title;
        $str.=self::showLine();
        $str.="{$name}的年龄是{$age}岁";
        echo $str;
    }
}
//创建学生类的对象
$obj=new Student();
$obj->showInfo("kakura",70);
//创建第2个对象
$obj2=new Student();
$obj2->showInfo("gangna",20);

10.parent关键字

  • self代表当前类,parent代表父类
  • self可以调用本类的内容:类常量、静态属性、静态方法、成员方法
  • parent可以调用父类的内容:类常量、静态属性、静态方法、成员方法

11.定义类的常量

  • 常量:不能修改,不能删除
  • 提示:在一次HTTP请求过程中,常量不能修改
  • 类常量定义使用const关键字,Define()定义的常量为全局常量
  • 类常量,就是类的常量,与对象无关
  • 类常量只能通过类名(类名::常量)来调用,成员的东西,只能通过对象来调用
  • 访问类常量,是通过范围解析符(::)来访问类的常量:Student::TITLE
  • 访问对象的内容,是通过箭头->来访问:$obj->name
  • 类常量在内存中只有一份,不会随着对象增加而增加。
  • 类常量可以被所有对象共享
  • 好处:节省内存
//例:定义一个学生类
class Student{
    //类常量
    const DB_HOST="localhost";
    const DB_USER="root";
    const DB_PWD="";
    //公共的成员方法
    public function showInfo(){
        $str="主机名:".Student::DB_HOST;
        $str.="<br>用户名:".Student::DB_USER;
        $str.="<br>密码:".Student::DB_PWD;
        return $str;
    }
}
//1.直接访问类的常量,静态化调用方式
$str="主机名:".Student::DB_HOST;
$str.="<br>用户名:".Student::DB_USER;
$str.="<br>密码:".Student::DB_PWD;
echo $str."<hr/>";
//2.对象实例化
$obj=new Student();
echo $obj->showInfo();

12 静态属性和静态方法

  • static关键字修饰
  • 静态属性和方法,与类相关,与对象无关
  • 静态属性和方法在内存中只有一份,不会随着对象增加而增加。
  • 可以被所有对象共享
  • 静态属性的值是可以改变的
  • 静态属性和方法,是有权限控制符的
//例:定义一个学生类
class Student{
    //公共的静态方法
    static public $title="<h2>club</h2>";//多个修饰符关键字,顺序可以不一致
    //私有的静态方法
    private static function showLine(){
        return "<hr/>";
    }
    //公共的成员方法
    public function showInfo($name,$age){
        $str=Student::$title;
        $str.=Student::showLine();
        $str.="{$name}的年龄是{$age}岁";
        echo $str;
    }
}
//创建学生类的对象
$obj=new Student();
$obj->showInfo("kakura",70);
//创建第2个对象
$obj2=new Student();
$obj2->showInfo("gangna",20);

13 最终类和最终方法

  • Final最终类,不能被继承,直接实例化。该类已经完善,不需升级扩展
  • 最终方法,不能被重写,直接调用
  • 一般,数据库操作类,也可定义为最终类

14 抽象类和抽象方法

  • Abstract抽象类:该类只能被继承,不能直接实例化。常用于基础类
  • 抽象方法:该方法没有方法体,抽象方法必须先继承,后重写
  • 如果一个类中有一个抽象方法,该类必须声明为抽象类
  • 抽象方法作用:方法的命名规范,是一种监督的机制
  • 抽象类中,也可能有其他元素:成员属性、成员方法、静态属性、具体方法、常量
  • 抽象方法不能是静态方法,只能是成员方法
//定义抽象的商品基础类
abstract class Shop{
    //抽象方法
    abstract protected function showInfo($a,$b);
    abstract protected function readMe();
}
//定义手机类,并继承商品类
final class Mobile extends Shop{
    //重写showInfo()抽象方法
    public function showInfo($a2,$b2){
        echo "{$a2}的年龄是{$b2}岁";
    }
    //重写readMe()抽象方法
    public function readMe(){
        echo "<hr>这是成员方法:".__METHOD__;
    }
}
//创建手机类对象
$obj=new Mobile();
$obj->showInfo("kakura",70);
$obj->readMe();
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章