PHP面向对象之3种数据访问方式详解(代码实例)
发布:smiling 来源: PHP粉丝网 添加日期:2022-06-15 08:38:46 浏览: 评论:0
本文目标
掌握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岁
思考中.......................
答案揭晓:
代码如下:
- <?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中数据访问有三种形式,public,protected,private
2.知道了3种数据访问方式各自的特点
Tags: PHP面向对象 PHP数据访问
- 上一篇:PHP中面向对象之继承
- 下一篇:最后一页
相关文章
- ·PHP 面向对象 继承(2013-11-14)
- ·PHP面向对象开发——封装关键字(2013-11-14)
- ·php面向对象__toString() 用法详解(2014-02-20)
- ·php面向对象__call处理错误调用技巧(2014-02-20)
- ·php面向对象中子类中重载父类详解(2014-02-20)
- ·php面向对象的封装性说明(2014-05-21)
- ·PHP面向对象编程入门教程(2014-08-02)
- ·PHP5 中的常量 PHP 面向对象(2014-09-09)
- ·PHP 面向对象 final类与final方法(2014-09-09)
- ·php面向对象:观察者模式示例(2015-04-13)
- ·php面向对象之工厂模式示例(2015-04-13)
- ·PHP面向对象(OOP)编程:this的特殊用法(2015-12-12)
- ·php面试之面向对象的相关知识介绍(2019-12-16)
- ·聊聊php面向对象的编程基础(一)(2020-03-31)
- ·聊聊php面向对象的编程基础(二)(2020-03-31)
- ·php面向对象和面向过程有什么区别(2020-04-16)
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)