ホームページ >バックエンド開発 >PHPチュートリアル >PHPオブジェクト指向の3つのデータアクセス方法を詳しく解説(コード例)
PHP の 3 つのデータ アクセス方法の定義と機能をマスターする
1、public
2、protected
3、private
1 ,Public
: パブリック クラス メンバー
はどこからでもアクセスできます。具体的にはどのメンバーにアクセスできますか:
##● クラス (self) を定義するクラス ● このクラスのサブクラス##● その他のクラス
##2,Protected
: 保護されたクラスのメンバー##● このクラスを定義するクラス ( Self ) #●● このクラスのサブクラス
Private
: プライベート クラスのメンバー# 自分自身のみがアクセス可能概要: 上から下に向かって、制約する機能がますます強化されています。
(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)的构造函数中直接访问
?>
ランニング効果は次のとおりです。
<?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/>";//结果报错,说明不行 ?>操作の効果は次のとおりです。
ケース 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();//结果报错,说明也不能在子类中访问 ?>操作効果は次のとおりです:
概要: 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 サイトの他の関連記事を参照してください。