面向对象编程(oop)初体验
16lz
2021-08-13
一、类
类是一个具有相同属性和方法的集合,类成员属性就类似于普通的php变量,类成员方法类似于普通的php函数。
如:NBA球员都是一类,有姓名、身高、球队、球号、体重等属性,还会跑步、投篮等方法,可以把这些属性跟方法放到一个集合,如:
<?php//定义一个Player类classPlayer{//定义类的属性public$name;public$height;public$team;protected$playNum=23;private$weight;//定义类的方法方法这里public标识不是必须的但是一般还是建议加上,不加默认是public标识publicfunctionjog(){//$this特殊对象引用永远代表本对象总与当前对象做一个绑定属于墙头草谁调用他往谁那里倒return"$this->nameisjogging,whoseplayNumis$this->playNum";}publicfunctionshoot(){return"$this->nameisshooting";}}?>
二、对象及oop的封装性
对象是类实例化的产物,定义好一个类以后,就可以使用new关键字实例化一个类,然后可以赋给一个变量即对象引用。所谓封装性就是使用者不必要了解内部细节及实现原理,将类封装起来,隐藏属性或方法(隐藏实现的细节)使其不对外可见,使用者直接使用就可以,目的是为了控制在程序中属性的读写(读取或者修改)的访问级别,使用者只需要通过外部接口以特定的权限来使用类成员
//实例化一个对象,赋值给$j这个变量,这里就是Player这个类已经做好了封装,$j直接去使用$j=newPlayer;//使用->访问符号访问对象里的属性或者方法,也可以后面加=给其进行赋值,还需要注意访问的时候去掉$符号$j->name="Jordan";//方法同理$j->jog();
三、构造函数(构造器)与类的简单自动加载
构造函数(构造器)是一个魔术方法__construct(),除可以给public标识的属性初始化赋值外,还可以给protected、private标识的属性赋值,如最开始的文件中这些内容可以用构造器处理:
//声明一个构造器并将所有的属性加进去初始化类成员让类的状态稳定下来publicfunction__construct($name,$height,$team,$playNum,$weight){$this->name=$name;$this->height=$height;$this->team=$team;$this->playNum=$playNum;$this->weight=$weight;}
然后可以将shoot()方法进行改进,调用$weight:
publicfunctionshoot(){//尝试将weight属性加进去return"$this->nameisshooting,weighing$this->weight<br>";}
重新实例化对象,并进行调用,这里还需要注意,使用__construct()以后,__construct()中有几个参数,调用这个类的时候就需要往里面传几个参数:
//重新将类进行实例化,并将参数按__construct()的要求传入$jordan=newPlayer('Jordan','203cm','Bulk',23,'80kg');//输出访问上面的shoot方法返回的内容echo$jordan->shoot();
在类没有自动加载的情况下,可以用require语句调用一个类文件
如:
require'Player.php';
但是如果有多个类需要调用的时候就会很麻烦,这个时候可以用spl_autoload_register()声明一个匿名函数做一个简单的自动加载,下面以类跟需要调用的文件在同一文件夹下为例:
//使用spl_autoload_register()声明一个匿名函数,并将类的名称作为参数传入,这里需要注意,类名称需要跟文件的名称保持一致spl_autoload_register(function($className){//调用类名称.php的文件require$className.'php';})
更多相关文章
- 类的属性、封装、构造函数
- 0805 一.将数组的偶数去出, 二.尝试实现计算器功能
- 抖音用户评论和ID的采集方法
- 【前端 · 面试 】HTTP 总结(三)—— HTTP 请求方法
- 字符串 和数组的方法 以及js 的分支 和循环
- 记一下网站被攻击经历
- 07-12 作业
- 有关H5中背景音乐的自动播放功能
- 常用字符串数组方法