OOP基础/类(对象抽象化的结果)与对象 (类实例化结果)/构造方法/对象成员之间的内部访问/类的自动加载/静态成员的访问 类的引用/类的继承 扩展 父类方法
一. 类(对象抽象化的结果)与对象 (类实例化结果)
属性 | 含义 |
---|---|
class | 类声明 |
new | 类实例化 |
public | 公开成员,随处可见 |
protected | 受保护成员,仅在当前类或子类中可见 |
private | 私有成员, 仅在当前类可见 |
spl_autoload_register() | 自动加载器 |
extends | 类的扩展 |
static | 声明类的静态成员 |
$this | 实例引用 |
self | 类的引用 |
trait | 类功能横向扩展 |
__construct | 构造器 1.对对象的公共属性进行初始化赋值 2. 记录当前类被实例化的次数 |
类
对象
类的概念
物以类聚,把具有相似特性的对象对垒到一个类中,类定义了这些相似对象拥有的相同的属性和方法
类是相似对象的描述,成为类的定义,是该类对象的蓝图或者原型
类的对象称为一个类的实例(Instance)
类的属性和方法统称为类成员
类的实例化
类的实例化:通过类定义创建一个类的对象
类的定义属性值都是空或默认值,而对象的属性都有具体的值
类的定义
类的定义以关键字class开始,后面跟着这个类的名称。类的命名通常每个单词的第一个字母大写,以中括号开始和结束
类的实例化为对象时使用关键字new,new之后紧跟类的名称和一对圆括号
对象中得成员属性和方法可以通过->符号来访问
①类的声明/类的实例化结果
public 公开成员,实例对象 用 new 关键字 + 类名称,在创建好实例对象后,可以用用->访问里面的公共成员或者方法
<?php//运动类class moveMent{ //public 公开成员 public $name; //姓名 public $height; //身高 public $weight; //体重 public $age; //性别 public $gender; //年龄}//实例对象 用 new 关键字 + 类名称$ZhanShuai = new moveMent;//在创建好实例对象后,可以用用->访问里面的公共成员或者方法$ZhanShuai -> name = "张帅";$ZhanShuai -> height = "170cm";$ZhanShuai -> weight = "55kg";$ZhanShuai -> age = "男";$ZhanShuai -> gender = "23";echo "姓名:" .$ZhanShuai -> name ."<br>";;echo "身高:" .$ZhanShuai -> height."<br>"; ;echo "体重:".$ZhanShuai -> weight."<br>"; ;echo "性别: " .$ZhanShuai -> age."<br>"; ;echo "年龄: " .$ZhanShuai -> gender ."岁"."<br>";
二. 构造方法
__construct 构造器 1.对对象的公共属性进行初始化赋值 2. 记录当前类被实例化的次数
有构造方法时, 类的实例化必须给构造方法传值,否则会报错
给构造方法传递参数,并且访问类里面成员实例方法
<?php//①类的声明/类的实例化结果//运动类class moveMent2{ //public 公开成员 public $name; //姓名 //protected 受保护成员,仅限本类以及子类访问 protected $height; //身高 //private 私有成员,仅限本类中的使用. 如何给私有成员赋值 1. 通过构造函数 2. 通过魔术方法 __Set() to be continued.... private $weight; //体重 public $age; //性别 public $gender; //年龄 //__construct 构造器 1.对对象的公共属性进行初始化赋值 2. 记录当前类被实例化的次数 public function __construct($name,$height,$weight,$age,$gender) { //特殊的对象引用$this :代表本对象 , 完成对象内部成员的访问 //使用$this访问类成员初始化赋值 $this->name = $name; $this->height = $height; $this->weight = $weight; $this->age = $age; $this->gender = $gender; } //成员实例方法 public function movements(){ if ($this->height > 175 && $this->weight < 100) { return "$this->name 适合成为运动员"; }else { return "$this->name 不适合成为运动员"; } }}//有构造方法时, 类的实例化必须给构造方法传值//实例对象 用 new 关键字 + 类名称// $zql = new moveMent2;$zql = new moveMent2("张起灵","180","60kg","男","23");$panzi = new movement2("胖子","170","80kg","男","23");//调用类方法echo $zql->movements() ."<br>";echo $panzi->movements() ;
三.对象成员之间的内部访问 $this
特殊的对象引用$this :代表本对象 , 完成对象内部成员的访问,类似指针
//__construct 构造器 1.对对象的公共属性进行初始化赋值 2. 记录当前类被实例化的次数 public function __construct($name,$height,$weight,$age,$gender) { //特殊的对象引用$this :代表本对象 , 完成对象内部成员的访问 //使用$this访问类成员初始化赋值 $this->name = $name; $this->height = $height; $this->weight = $weight; $this->age = $age; $this->gender = $gender; } //成员实例方法 public function movements(){ if ($this->height > 175 && $this->weight < 100) { return "$this->name 适合成为运动员"; }else { return "$this->name 不适合成为运动员"; } }
四.private仅限本类中使用 protected本类中,子类中使用
protected本类中,子类中使用
访问受保护的成员会进行报错,protected只能在本类中,子类中使用 Fatal error: Uncaught Error: Cannot access protected property moveMent3::$height in
private仅限本类中使用
访问私有成员private也会进行报错,因为私有成员仅限于本类中使用
Fatal error: Uncaught Error: Cannot access private property moveMent3::$weight in如何给私有成员赋值 1. 通过构造函数 2. 通过魔术方法 __Set() to be continued….
//__construct 构造器 public function __construct($height,$weightr) { //特殊的对象引用$this :代表本对象 , 完成对象内部成员的访问 //使用$this访问类成员初始化赋值 $this->height = $height; $this->weight = $weight; } //成员实例方法 public function Show(){ echo "我的体重是:$this->weight"."<br>"; echo "我的身高是:$this->height"."<br>"; } $getName = new moveMent3("靓仔","175","55Kg","男","21"); echo $getName->Show();
五.类的自动加载 spl_autoload_register /静态成员的访问
①类的自动加载 spl_autoload_register
<?php//类的自动加载器spl_autoload_register(function($class){ require $class . ".php";});<?php//spl_autoload_register 注册类的自动加载器//引入类的自动加载器require "1-splauto.php";//建立对象 类的实例化$getName = new moveMent3("小龙女","165cm","45kg","女","21岁");//调用 类成员方法echo $getName->Show();
②静态成员的访问
static 关键字:标志静态成员(方法,属性), 静态成员只能由类来调用, 为所有对象共享
self:: 静态成员与类的实例无关 不能用$this来访问 用self:: 类的引用 访问 静态成员
<?php/** * 类的静态成员 * static 关键字:标志静态成员(方法,属性), 静态成员只能由类来调用, 为所有对象共享 */class mStatic{ //static 静态成员 public static $name; public static $wage; public function __construct($name,$wage){ //静态成员与类的实例无关 不能用$this来访问 用self:: 类的引用 访问 静态成员 self::$name = $name; self::$wage = $wage; }}//创建对象 类的实例化$user = new mStatic("张三",12000);//访问静态成员 echo $user::$name." "." ";echo "工资:". $user::$wage;
七.类的继承 扩展 父类方法(魔术方法,普通方法)的重写 parent:: 调用父类成员
父类
<?php//物品类class mItems{ //衣服和价格都是公共成员 public $clothes; public $price; //构造器 给成员属性初始化 public function __construct($clothes,$price) { $this->clothes = $clothes; $this->price = $price; } //公共成员方法 public function Show(){ return $this->clothes."是".$this->price."元"; }}
子类
<?php//继承物品父类class SumItems extends mItems{ //拓展属性 私有成员 private $num; //重写父类魔术方法 构造器 public function __construct($clothes,$price,$num) { //parent关键字 调用父类的成员方法 parent::__construct($clothes,$price); //初始化子类拓展成员属性 $this->num = $num; } //重写父类普通方法 public function Show() { return parent::Show().",库存还有:".$this->num."<br>"; } //拓展普通方法 public function Sum() { return "剩余库存金额一共:".($this->price * $this->num)."元"."<br>"; }}
服务端
//引入文件require "1-splauto.php";//LiLing 实例化子类$LiLing = new SumItems("lining男衣",198,2000);//调用对象LiLing 子类方法 echo $LiLing->Show();echo $LiLing->Sum();
本单元小结 |
---|
类(对象抽象化的结果)与对象 (类实例化结果) |
构造方法 __construct() |
对象成员之间的内部访问 $this |
private 仅限本类中使用 protected 本类中,子类中使用 |
类的自动加载 spl_autoload_register(function()) |
静态成员的访问 类的引用self:: |
类的继承 extends 扩展 父类方法(魔术方法,普通方法)的重写 parent:: 调用父类成员 |