首页后端开发PHPPHP面向对象之3种数据访问方式详解(代码实例)

PHP面向对象之3种数据访问方式详解(代码实例)

时间2024-02-02 03:25:03发布访客分类PHP浏览997
导读:收集整理的这篇文章主要介绍了PHP面向对象之3种数据访问方式详解(代码实例),觉得挺不错的,现在分享给大家,也给大家做个参考。本文目标掌握PHP中数据访问的3种方式的定义和作用1、public2、PRotected3、private(一 、...
收集整理的这篇文章主要介绍了PHP面向对象之3种数据访问方式详解(代码实例),觉得挺不错的,现在分享给大家,也给大家做个参考。

本文目标

掌握PHP中数据访问的3种方式的定义和作用

1、public

2、PRotected

3、private

(一)、数据访问的3种方式

1、Public:公有的类成员

可以在任何地方访问,具体可以被哪些访问了:

● 定义该类的类(自身)

● 该类的子类

● 其他类

2、Protected:受保护的类成员

● 定义该类的类(自身)

● 该类的子类

3、Private:私有的类成员

● 只有自身才可以访问

总结:从上到下约束能力是越来越强的

单纯从以上的文字描述,我们理解起来还是有点费力的,那么还是按照理论+实践的方式来进行理解,那么接下来我们就通过具体的代码来理解这3种数据访问的方式在PHP中到底是如何实现的,到底它们各自的特点是什么,最后来体会一下它们的约束能力到底又是怎样。

(二)具体代码

说明:为了让大家能更好的理解面向对象,所以写文章的时候,我也是尽量遵循一定的规则,由浅到深,由易到难,所以我写的每篇文章都是和上篇文章有一定的关联,比如以下的代码案例,我又是在上篇文章的代码上进行的拓展和延伸。

案例一:知道public的定义,然后证明它可以在3个地方都可以访问(1.在自己定义的类中,2.在子类中 3.在外部)

?php//定义 “人” 类class Human{
        public $name = "";
    //姓名     public $height = "";
    //身高    public $weight = "";
//体重    public function eat($food){
            echo $this->
    name."在吃".$food."br/>
    ";
    }
}
//女主播class Anchors extends Human{
        public $name = "";
        public $stageName = "";
    public function __construct( $name,$stageName ){
            $this->
    name = $name;
            $this->
    stageName = $stageName;
    }
    public function singing(){
            echo "我是女主播,我会唱歌br/>
    ";
    }
  }
// Nba球员类 class Nbaplayer extends Human{
       //因为父类已经有了,所以就不需要再写了,通过extends来实现    // public $name  = "";
    //姓名    // public $height = "";
    //身高    // public $weight = "";
    //体重    public $team = "";
    //团队    public $playerName = "";
//球员号码    public function __construct( $name,$height,$weight,$team,$playerName ){
            $this->
    name = $name;
            $this->
    height=$height;
            $this->
    weight = $weight;
            $this->
    team = $team;
            $this->
    playName = $playerName;
        echo "构造函数执行了,当前对象是{
    $this->
name}
    br/>
    ";
    }
          //跑步    public function run(){
            echo "跑步中br/>
    ";
    }
    //跳跃    public function jump(){
            echo "跳跃br/>
    ";
    }
    //运球    public function dribble(){
            echo "运球br/>
    ";
    }
     //传球    public function pass(){
            echo "传球br/>
    ";
    }
    //投篮    public function shoot(){
            echo "投篮br/>
    ";
    }
    //扣篮    public function dunk(){
            echo "扣篮br/>
    ";
    }
 }
     //数据访问测试//public 测试//1、测试在类的外部可以访问 //创建乔丹对象 $jordon = new NbaPlayer("乔丹","1.98米","98公斤","公牛","23");
     //输出乔丹对象 echo "名称= ".$jordon->
    name."br/>
    ";
    //结果能够输出来,说明在外部是可以访问Public类成员的//2、测试在类的自身里面可以访问//例子:比如构造函数里,我们可以直接通过$this->
    team//3、测试是否可以子类中可以访问//例子:比如父类中定义的name 一样可以在子类(NbaPlayer)的构造函数中直接访问?>
    

运行效果如下:

案例二:知道protected的定义,然后证明它可以在2个地方都可以访问(1.在自己定义的类中,2.在子类中 )

?php//定义“人”类class Human{
        public $name = "";
    //姓名    public $height = "";
    //身高    public $weight = "";
    //体重    protected $addr = "长沙";
//受保护的类       public function eat($food){
            echo $this->
    name."在吃".$food."br/>
    ";
    }
    //测试protected类成员是否可以在自身类中可以访问    public function getAddrInHuman(){
            echo "Human 自身类中的add=".$this->
    addr."br/>
    ";
    }
}
//女主播class Anchors extends Human{
        public $name = "";
        public $stageName = "";
    public function __construct( $name,$stageName ){
            $this->
    name = $name;
            $this->
    stageName = $stageName;
    }
    public function singing(){
            echo "我是女主播,我会唱歌br/>
    ";
    }
    //重写方法eat    public function  eat($food){
        echo "我是女主播,我是边唱歌边吃{
$food}
    br/>
    ";
    }
}
 class NbaPlayer extends Human{
       //因为父类已经有了,所以就不需要再写了,通过extends来实现    // public $name  = "";
    //姓名    // public $height = "";
    //身高    // public $weight = "";
    //体重    public $team = "";
    //团队    public $playerName = "";
//球员号码    public function __construct( $name,$height,$weight,$team,$playerName ){
            $this->
    name = $name;
            $this->
    height=$height;
            $this->
    weight = $weight;
            $this->
    team = $team;
            $this->
    playName = $playerName;
        echo "构造函数执行了,当前对象是{
    $this->
name}
    br/>
    ";
    }
        //测试protected类成员是否可以在子类中可以访问    public function getAddrInNbaPlayer(){
            echo "在NbaPlayer子类中addr=".$this->
    addr."br/>
    ";
    }
 }
     //创建乔丹对象 $jordon = new NbaPlayer("乔丹","1.98米","98公斤","公牛","23");
     //数据访问测试 //protected测试 //1、测试是否可以在自身类中可以访问 $jordon->
    getAddrInHuman();
    //结果OK,确实是可以访问 //2.测试是否可以在子类中访问 $jordon->
    getAddrInNbaPlayer();
    //结果OK,确实也是可以访问 //3.测试是否可以被外部访问 echo "在类外部访问addr=".$jordon->
    addr."br/>
    ";
    //结果报错,说明不行?>
    

运行效果如下:


案例三:知道private的定义,然后证明它只能在1个地方可以访问(1.在自己定义的类中)

?php//定义“人”类class Human{
        public $name = "";
    //姓名    public $height = "";
    //身高    public $weight = "";
    //体重    private $isHungry = true;
//测试私有变量是否可以在子类中访问      //为了让外部可以访问private类成员    public function getPrivateInfo(){
            return "private 变量 isHungry=".$this->
    isHungry."br/>
    ";
    }
}
//女主播class Anchors extends Human{
        public $name = "";
        public $stageName = "";
    public function __construct( $name,$stageName ){
            $this->
    name = $name;
            $this->
    stageName = $stageName;
    }
    public function singing(){
            echo "我是女主播,我会唱歌br/>
    ";
    }
    //重写方法eat    public function  eat($food){
        echo "我是女主播,我是边唱歌边吃{
$food}
    br/>
    ";
    }
}
 class NbaPlayer extends Human{
       //因为父类已经有了,所以就不需要再写了,通过extends来实现    // public $name  = "";
    //姓名    // public $height = "";
    //身高    // public $weight = "";
    //体重    public $team = "";
    //团队    public $playerName = "";
//球员号码    public function __construct( $name,$height,$weight,$team,$playerName ){
            $this->
    name = $name;
            $this->
    height=$height;
            $this->
    weight = $weight;
            $this->
    team = $team;
            $this->
    playName = $playerName;
        // echo "构造函数执行了,当前对象是{
    $this->
name}
    br/>
    ";
    }
    //测试private类成员是否可以在子类中访问    public function getIsHungryInNbaPlayer(){
            echo "在NbaPlayer子类中isHungry=".$this->
    isHungry."br/>
    ";
    }
 }
      //创建乔丹对象 $jordon = new NbaPlayer("乔丹","1.98米","98公斤","公牛","23");
     //数据访问测试 //private测试 //1.测试私有变量能否被外部访问 echo "私有变量isHungry =".$jordon->
    isHungry ."br/>
    ";
    //结果不能访问,说明private变量不能被子类访问 //测试私有变量能否在定义的类的内部访问 echo $jordon->
    getPrivateInfo();
    //结果Ok,说明可以 //测试私有变量是否可以在子类中访问$jordon->
    getIsHungryInNbaPlayer();
    //结果报错,说明也不能在子类中访问?>
    

运行效果如下:

总结:

1、Public:公有的类成员

可以在任何地方访问,具体可以被哪些访问了:

● 定义该类的类(自身)

● 该类的子类

● 其他类

2、Protected:受保护的类成员

● 可以被其自身及其子类访问

3、Private:私有的类成员

● 只有自身才可以访问

4.为了让外部可以访问private类成员,我们可以通过在类中定义一个public方法,然后在public方法中返回private类成员

好,到了这里,想必大家对数据访问应该有了一个比较清晰的认识,那我们现在来学以致用,用我们学到的这个知识来解决以下的问题,先自己思考一下怎么做,然后再看答案

问题:NBA球员一般都不想让其他人知道自己的真实姓名,比如说我明明是40岁,但是我就想让别人以为是38岁

思考中.......................

答案揭晓:

代码如下:

?phpclass Human{
        public $name = "";
    //姓名    public $height = "";
    //身高    public $weight = "";
//体重}
//女主播class Anchors extends Human{
        public $name = "";
        public $stageName = "";
    public function __construct( $name,$stageName ){
            $this->
    name = $name;
            $this->
    stageName = $stageName;
    }
    public function singing(){
            echo "我是女主播,我会唱歌br/>
    ";
    }
    //重写方法eat    public function  eat($food){
        echo "我是女主播,我是边唱歌边吃{
$food}
    br/>
    ";
    }
}
 class NbaPlayer extends Human{
       //因为父类已经有了,所以就不需要再写了,通过extends来实现    // public $name  = "";
    //姓名    // public $height = "";
    //身高    // public $weight = "";
    //体重    public $team = "";
    //团队    public $playerName = "";
    //球员号码     //数据访问     private $age = "40";
     //end    public function __construct( $name,$height,$weight,$team,$playerName ){
            $this->
    name = $name;
            $this->
    height=$height;
            $this->
    weight = $weight;
            $this->
    team = $team;
            $this->
    playName = $playerName;
        echo "构造函数执行了,当前对象是{
    $this->
name}
    br/>
    ";
    }
          //跑步    public function run(){
            echo "跑步中br/>
    ";
    }
    //跳跃    public function jump(){
            echo "跳跃br/>
    ";
    }
    //运球    public function dribble(){
            echo "运球br/>
    ";
    }
     //传球    public function pass(){
            echo "传球br/>
    ";
    }
    //投篮    public function shoot(){
            echo "投篮br/>
    ";
    }
    //扣篮    public function dunk(){
            echo "扣篮br/>
    ";
    }
      //数据访问     public function getAge(){
            // echo $this->
    name."的age=".$this->
    age."br/>
    ";
            //既然能够在自身类中获取到年龄,那么为了解决NBA球员不想让别人知道自己真实年龄的问题            //我们就可以对年龄进行操作-造假 让年龄更小        $age = $this->
    age-2;
            echo $this->
    name."的age=".$age."br/>
    ";
    }
 }
      //创建乔丹对象 $jordon = new NbaPlayer("乔丹","1.98米","98公斤","公牛","23");
     $jordon->
    getAge();
    //结果Ok 说明年龄是可以获取到的,既然可以获取到age我们在函数内部作假,来达到一个谎报年龄的目的?>
    

运行效果如下:

总结:

1.知道了在PHP中数据访问有三种形式,public,protected,private

2.知道了3种数据访问方式各自的特点

以上就是PHP面向对象之3种数据访问方式详解(代码实例)的详细内容,更多请关注其它相关文章!

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: PHP面向对象之3种数据访问方式详解(代码实例)
本文地址: https://pptw.com/jishu/596297.html
php面向对象之析构函数和对象引用 正式开源的优雅测试框架 PestPHP

游客 回复需填写必要信息