OOP基础/类(对象抽象化的结果)与对象 (类实例化结果)/构造方法/对象成员之间的内部访问/类的自动加载/静态成员的访问 类的引用/类的继承 扩展 父类方法

一. 类(对象抽象化的结果)与对象 (类实例化结果)

属性含义
class类声明
new类实例化
public公开成员,随处可见
protected受保护成员,仅在当前类或子类中可见
private私有成员, 仅在当前类可见
spl_autoload_register()自动加载器
extends类的扩展
static声明类的静态成员
$this实例引用
self类的引用
trait类功能横向扩展
__construct构造器 1.对对象的公共属性进行初始化赋值 2. 记录当前类被实例化的次数

对象

类的概念

物以类聚,把具有相似特性的对象对垒到一个类中,类定义了这些相似对象拥有的相同的属性和方法
类是相似对象的描述,成为类的定义,是该类对象的蓝图或者原型
类的对象称为一个类的实例(Instance)
类的属性和方法统称为类成员

类的实例化

类的实例化:通过类定义创建一个类的对象
类的定义属性值都是空或默认值,而对象的属性都有具体的值

类的定义

类的定义以关键字class开始,后面跟着这个类的名称。类的命名通常每个单词的第一个字母大写,以中括号开始和结束
类的实例化为对象时使用关键字new,new之后紧跟类的名称和一对圆括号
对象中得成员属性和方法可以通过->符号来访问


①类的声明/类的实例化结果

public 公开成员,实例对象 用 new 关键字 + 类名称,在创建好实例对象后,可以用用->访问里面的公共成员或者方法

  1. <?php
  2. //运动类
  3. class moveMent{
  4. //public 公开成员
  5. public $name; //姓名
  6. public $height; //身高
  7. public $weight; //体重
  8. public $age; //性别
  9. public $gender; //年龄
  10. }
  11. //实例对象 用 new 关键字 + 类名称
  12. $ZhanShuai = new moveMent;
  13. //在创建好实例对象后,可以用用->访问里面的公共成员或者方法
  14. $ZhanShuai -> name = "张帅";
  15. $ZhanShuai -> height = "170cm";
  16. $ZhanShuai -> weight = "55kg";
  17. $ZhanShuai -> age = "男";
  18. $ZhanShuai -> gender = "23";
  19. echo "姓名:" .$ZhanShuai -> name ."<br>";;
  20. echo "身高:" .$ZhanShuai -> height."<br>"; ;
  21. echo "体重:".$ZhanShuai -> weight."<br>"; ;
  22. echo "性别: " .$ZhanShuai -> age."<br>"; ;
  23. echo "年龄: " .$ZhanShuai -> gender ."岁"."<br>";

二. 构造方法

  • __construct 构造器 1.对对象的公共属性进行初始化赋值 2. 记录当前类被实例化的次数

    有构造方法时, 类的实例化必须给构造方法传值,否则会报错

给构造方法传递参数,并且访问类里面成员实例方法

  1. <?php
  2. //①类的声明/类的实例化结果
  3. //运动类
  4. class moveMent2{
  5. //public 公开成员
  6. public $name; //姓名
  7. //protected 受保护成员,仅限本类以及子类访问
  8. protected $height; //身高
  9. //private 私有成员,仅限本类中的使用. 如何给私有成员赋值 1. 通过构造函数 2. 通过魔术方法 __Set() to be continued....
  10. private $weight; //体重
  11. public $age; //性别
  12. public $gender; //年龄
  13. //__construct 构造器 1.对对象的公共属性进行初始化赋值 2. 记录当前类被实例化的次数
  14. public function __construct($name,$height,$weight,$age,$gender)
  15. {
  16. //特殊的对象引用$this :代表本对象 , 完成对象内部成员的访问
  17. //使用$this访问类成员初始化赋值
  18. $this->name = $name;
  19. $this->height = $height;
  20. $this->weight = $weight;
  21. $this->age = $age;
  22. $this->gender = $gender;
  23. }
  24. //成员实例方法
  25. public function movements(){
  26. if ($this->height > 175 && $this->weight < 100) {
  27. return "$this->name 适合成为运动员";
  28. }else {
  29. return "$this->name 不适合成为运动员";
  30. }
  31. }
  32. }
  33. //有构造方法时, 类的实例化必须给构造方法传值
  34. //实例对象 用 new 关键字 + 类名称
  35. // $zql = new moveMent2;
  36. $zql = new moveMent2("张起灵","180","60kg","男","23");
  37. $panzi = new movement2("胖子","170","80kg","男","23");
  38. //调用类方法
  39. echo $zql->movements() ."<br>";
  40. echo $panzi->movements() ;

三.对象成员之间的内部访问 $this

  • 特殊的对象引用$this :代表本对象 , 完成对象内部成员的访问,类似指针
  1. //__construct 构造器 1.对对象的公共属性进行初始化赋值 2. 记录当前类被实例化的次数
  2. public function __construct($name,$height,$weight,$age,$gender)
  3. {
  4. //特殊的对象引用$this :代表本对象 , 完成对象内部成员的访问
  5. //使用$this访问类成员初始化赋值
  6. $this->name = $name;
  7. $this->height = $height;
  8. $this->weight = $weight;
  9. $this->age = $age;
  10. $this->gender = $gender;
  11. }
  12. //成员实例方法
  13. public function movements(){
  14. if ($this->height > 175 && $this->weight < 100) {
  15. return "$this->name 适合成为运动员";
  16. }else {
  17. return "$this->name 不适合成为运动员";
  18. }
  19. }

四.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….

  1. //__construct 构造器
  2. public function __construct($height,$weightr)
  3. {
  4. //特殊的对象引用$this :代表本对象 , 完成对象内部成员的访问
  5. //使用$this访问类成员初始化赋值
  6. $this->height = $height;
  7. $this->weight = $weight;
  8. }
  9. //成员实例方法
  10. public function Show(){
  11. echo "我的体重是:$this->weight"."<br>";
  12. echo "我的身高是:$this->height"."<br>";
  13. }
  14. $getName = new moveMent3("靓仔","175","55Kg","男","21");
  15. echo $getName->Show();

五.类的自动加载 spl_autoload_register /静态成员的访问

①类的自动加载 spl_autoload_register

  1. <?php
  2. //类的自动加载器
  3. spl_autoload_register(function($class){
  4. require $class . ".php";
  5. });
  6. <?php
  7. //spl_autoload_register 注册类的自动加载器
  8. //引入类的自动加载器
  9. require "1-splauto.php";
  10. //建立对象 类的实例化
  11. $getName = new moveMent3("小龙女","165cm","45kg","女","21岁");
  12. //调用 类成员方法
  13. echo $getName->Show();

②静态成员的访问

  • static 关键字:标志静态成员(方法,属性), 静态成员只能由类来调用, 为所有对象共享
  • self:: 静态成员与类的实例无关 不能用$this来访问 用self:: 类的引用 访问 静态成员
  1. <?php
  2. /**
  3. * 类的静态成员
  4. * static 关键字:标志静态成员(方法,属性), 静态成员只能由类来调用, 为所有对象共享
  5. */
  6. class mStatic{
  7. //static 静态成员
  8. public static $name;
  9. public static $wage;
  10. public function __construct($name,$wage){
  11. //静态成员与类的实例无关 不能用$this来访问 用self:: 类的引用 访问 静态成员
  12. self::$name = $name;
  13. self::$wage = $wage;
  14. }
  15. }
  16. //创建对象 类的实例化
  17. $user = new mStatic("张三",12000);
  18. //访问静态成员
  19. echo $user::$name." "." ";
  20. echo "工资:". $user::$wage;

七.类的继承 扩展 父类方法(魔术方法,普通方法)的重写 parent:: 调用父类成员

父类

  1. <?php
  2. //物品类
  3. class mItems{
  4. //衣服和价格都是公共成员
  5. public $clothes;
  6. public $price;
  7. //构造器 给成员属性初始化
  8. public function __construct($clothes,$price)
  9. {
  10. $this->clothes = $clothes;
  11. $this->price = $price;
  12. }
  13. //公共成员方法
  14. public function Show(){
  15. return $this->clothes."是".$this->price."元";
  16. }
  17. }

子类

  1. <?php
  2. //继承物品父类
  3. class SumItems extends mItems{
  4. //拓展属性 私有成员
  5. private $num;
  6. //重写父类魔术方法 构造器
  7. public function __construct($clothes,$price,$num)
  8. {
  9. //parent关键字 调用父类的成员方法
  10. parent::__construct($clothes,$price);
  11. //初始化子类拓展成员属性
  12. $this->num = $num;
  13. }
  14. //重写父类普通方法
  15. public function Show()
  16. {
  17. return parent::Show().",库存还有:".$this->num."<br>";
  18. }
  19. //拓展普通方法
  20. public function Sum()
  21. {
  22. return "剩余库存金额一共:".($this->price * $this->num)."元"."<br>";
  23. }
  24. }

服务端

  1. //引入文件
  2. require "1-splauto.php";
  3. //LiLing 实例化子类
  4. $LiLing = new SumItems("lining男衣",198,2000);
  5. //调用对象LiLing 子类方法
  6. echo $LiLing->Show();
  7. echo $LiLing->Sum();

本单元小结
类(对象抽象化的结果)与对象 (类实例化结果)
构造方法 __construct()
对象成员之间的内部访问 $this
private仅限本类中使用 protected本类中,子类中使用
类的自动加载 spl_autoload_register(function())
静态成员的访问 类的引用self::
类的继承 extends 扩展 父类方法(魔术方法,普通方法)的重写 parent:: 调用父类成员

更多相关文章

  1. php之单例模式连接数据库
  2. 【PHP 面向对象】面向对象(OOP)编程知识点归纳总结(一)
  3. <JVM下篇:性能监控与调优篇>补充:使用OQL语言查询对象信息
  4. <JVM下篇:性能监控与调优篇>补充:浅堆深堆与内存泄露
  5. Python如何进行内存管理?
  6. Pandas Series对象有哪些属性?六大类!
  7. 1.jsp 三大指令 六大标签 九大内置对象 四大作用域
  8. 03-Vue_样式设置
  9. 序列化框架的选型和比对

随机推荐

  1. 导入地址簿联系人,存储在数组中并保存到数
  2. 绑定和解除相同javascript函数的目的是什
  3. jquery不会对select/选项更改事件作出反
  4. jquery ajax和php实现返回值 json类型
  5. 使用jquery post发布PHP文件
  6. 如何使用jQuery增加字体大小的变化?
  7. 将CSS样式转换成JS变量?
  8. JQuery 的选取元素 和 方法
  9. 使用json将发送请求发送到RESTful WCF
  10. 求ext动态树(asp.net+jquery+ajax+sql2008