ホームページ >バックエンド開発 >PHPチュートリアル >PHPオブジェクト指向の3つのデータアクセス方法を詳しく解説(コード例)

PHPオブジェクト指向の3つのデータアクセス方法を詳しく解説(コード例)

易达
易达オリジナル
2020-05-24 17:15:312191ブラウズ

この記事の目的

PHP の 3 つのデータ アクセス方法の定義と機能をマスターする

1、public

2、protected

3、private

(1)、3 つのデータ アクセス方法

1 ,Public: パブリック クラス メンバー

はどこからでもアクセスできます。具体的にはどのメンバーにアクセスできますか:

##● クラス (self) を定義するクラス

● このクラスのサブクラス

##● その他のクラス

##2,

Protected

: 保護されたクラスのメンバー

##● このクラスを定義するクラス ( Self ) #●● このクラスのサブクラス

3、

Private

: プライベート クラスのメンバー

# 自分自身のみがアクセス可能

概要: 上から下に向かって、制約する機能がますます強化されています。

上記のテキストの説明だけではまだ理解するのが少し難しいため、理論に従う必要があります。理解するために、次に特定のコードを使用して、これら 3 つのデータ アクセス メソッドが PHP でどのように実装されているか、それぞれの特徴は何であるかを理解し、最後にそれらのバインディング機能を理解しましょう。

(2) 具体的なコード

説明: オブジェクト指向をより深く理解していただくために、私も記事を書くときに一定のルールに従うようにしています。浅いものから深いもの、簡単なものから難しいものまで、どの記事も前の記事と関連性のあるものを書いています。

ケース 1: 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)的构造函数中直接访问

?>
ランニング効果は次のとおりです。

ケース 2: protected の定義を理解し、2 つの場所 (1. 自分で定義したクラス内、2. サブクラス内) でアクセスできることを証明します。

PHPオブジェクト指向の3つのデータアクセス方法を詳しく解説(コード例)

<?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/>";//结果报错,说明不行

?>

操作の効果は次のとおりです。

PHPオブジェクト指向の3つのデータアクセス方法を詳しく解説(コード例)

ケース 3: プライベートの定義を理解し、それを証明する1 か所でのみ使用できます Access (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();//结果报错,说明也不能在子类中访问

?>

操作効果は次のとおりです:

概要:

PHPオブジェクト指向の3つのデータアクセス方法を詳しく解説(コード例)

1. パブリック: パブリック クラス メンバー

はどこからでもアクセスできます。具体的にはどのメンバーにアクセスできますか:

● を定義するクラスクラス (自身)

● このクラスのサブクラス

## ● その他のクラス

#2. Protected: 保護されたクラスのメンバー

## ● 単独でアクセス可能およびそのサブクラス

3. プライベート: プライベート クラス メンバー

##● あなただけがアクセスできます

#4. 外部の世界がプライベート クラス メンバーにアクセスできるようにするために、クラス メソッドでパブリック クラス メンバーを定義し、パブリック メソッドでプライベート クラス メンバーを返すことができます。

さて、ここまで来ましたが、皆さんはデータ アクセスについてより明確に理解できるはずです。次の質問を解決するための知識を身に付けてください。まず方法を考えてから、答えを見てください。

質問: NBA プレーヤーは通常、自分の本名を他人に知られることを望みません。たとえば、私は明らかに 40 歳ですが、他の人には 38 歳だと思われたいだけです

思考.................... ..

答えが明らかになります:

コードは次のとおりです:

<?php

class 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 には、パブリック、プロテクト、プライベートの 3 つのデータ アクセス形式があることを理解します。

2. 3 つのデータ アクセス方法の特徴

以上がPHPオブジェクト指向の3つのデータアクセス方法を詳しく解説(コード例)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。