博客列表 >面向对象编程(oop)初体验

面向对象编程(oop)初体验

超超多喝水
超超多喝水原创
2021年08月12日 23:56:10633浏览

一、类

类是一个具有相同属性和方法的集合,类成员属性就类似于普通的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';
 })
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议