一、类
类是一个具有相同属性和方法的集合,类成员属性就类似于普通的php变量,类成员方法类似于普通的php函数。
如:NBA球员都是一类,有姓名、身高、球队、球号、体重等属性,还会跑步、投篮等方法,可以把这些属性跟方法放到一个集合,如:
<?php //定义一个Player类 class Player{ //定义类的属性 public $name; public $height; public $team; protected $playNum = 23; private $weight; //定义类的方法 方法这里public标识不是必须的 但是一般还是建议加上,不加默认是public标识 public function jog() { //$this 特殊对象引用 永远代表本对象 总与当前对象做一个绑定 属于墙头草 谁调用他往谁那里倒 return "$this->name is jogging,whose playNum is $this->playNum"; } public function shoot() { return "$this->name is shooting"; } } ?>
以上内容中,public代表可公开访问,protected 表示本类跟其子类可访问,private 表示只有本类可以访问,子类跟其他都无法访问。
二、对象及oop的封装性
对象是类实例化的产物,定义好一个类以后,就可以使用new关键字实例化一个类,然后可以赋给一个变量即对象引用。所谓封装性就是使用者不必要了解内部细节及实现原理,将类封装起来,隐藏属性或方法(隐藏实现的细节)使其不对外可见,使用者直接使用就可以,目的是为了控制在程序中属性的读写(读取或者修改)的访问级别,使用者只需要通过外部接口以特定的权限来使用类成员
//实例化一个对象,赋值给$j这个变量,这里就是Player这个类已经做好了封装,$j直接去使用 $j = new Player; //使用->访问符号访问对象里的属性或者方法,也可以后面加=给其进行赋值,还需要注意访问的时候去掉$符号 $j->name = "Jordan"; //方法同理 $j->jog();
三、构造函数(构造器)与类的简单自动加载
构造函数(构造器)是一个魔术方法__construct(),除可以给public标识的属性初始化赋值外,还可以给protected、private标识的属性赋值,如最开始的文件中这些内容可以用构造器处理:
//声明一个构造器并将所有的属性加进去 初始化类成员 让类的状态稳定下来 public function __construct($name,$height,$team,$playNum,$weight){ $this->name = $name; $this->height = $height; $this->team = $team; $this->playNum = $playNum; $this->weight = $weight; }
然后可以将shoot()方法进行改进,调用$weight:
public function shoot() { //尝试将weight属性加进去 return "$this->name is shooting,weighing $this->weight<br>"; }
重新实例化对象,并进行调用,这里还需要注意,使用__construct()以后,__construct()中有几个参数,调用这个类的时候就需要往里面传几个参数:
//重新将类进行实例化,并将参数按__construct()的要求传入 $jordan = new Player('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'; })