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

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:: 调用父类成员
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值