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."
";

}

}

//女主播

class Anchors extends Human{

public $name = "";

public $stageName = "";

public function __construct( $name,$stageName ){

$this->name = $name;

$this->stageName = $stageName;

}

public function singing(){

echo "我是女主播,我会唱歌
";

}

}

// 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}
";

}

//跑步

public function run(){

echo "跑步中
";

}

//跳跃

public function jump(){

echo "跳跃
";

}

//运球

public function dribble(){

echo "运球
";

}

//传球

public function pass(){

echo "传球
";

}

//投篮

public function shoot(){

echo "投篮
";

}

//扣篮

public function dunk(){

echo "扣篮
";

}

}

//数据访问测试

//public 测试

//1、测试在类的外部可以访问

//创建乔丹对象

$jordon = new NbaPlayer("乔丹","1.98米","98公斤","公牛","23");

//输出乔丹对象

echo "名称= ".$jordon->name."
";//结果能够输出来,说明在外部是可以访问Public类成员的

//2、测试在类的自身里面可以访问

//例子:比如构造函数里,我们可以直接通过$this->team

//3、测试是否可以子类中可以访问

//例子:比如父类中定义的name 一样可以在子类(NbaPlayer)的构造函数中直接访问

?>

运行效果如下:

运行效果如下:

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

//定义“人”类

class Human{

public $name = "";//姓名

public $height = "";//身高

public $weight = "";//体重

private $isHungry = true;//测试私有变量是否可以在子类中访问

//为了让外部可以访问private类成员

public function getPrivateInfo(){

return "private 变量 isHungry=".$this->isHungry."
";

}

}

//女主播

class Anchors extends Human{

public $name = "";

public $stageName = "";

public function __construct( $name,$stageName ){

$this->name = $name;

$this->stageName = $stageName;

}

public function singing(){

echo "我是女主播,我会唱歌
";

}

//重写方法eat

public function eat($food){

echo "我是女主播,我是边唱歌边吃{$food}
";

}

}

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}
";

}

//测试private类成员是否可以在子类中访问

public function getIsHungryInNbaPlayer(){

echo "在NbaPlayer子类中isHungry=".$this->isHungry."
";

}

}

//创建乔丹对象

$jordon = new NbaPlayer("乔丹","1.98米","98公斤","公牛","23");

//数据访问测试

//private测试

//1.测试私有变量能否被外部访问

echo "私有变量isHungry =".$jordon->isHungry ."
";//结果不能访问,说明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 "我是女主播,我会唱歌
";

}

//重写方法eat

public function eat($food){

echo "我是女主播,我是边唱歌边吃{$food}
";

}

}

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}
";

}

//跑步

public function run(){

echo "跑步中
";

}

//跳跃

public function jump(){

echo "跳跃
";

}

//运球

public function dribble(){

echo "运球
";

}

//传球

public function pass(){

echo "传球
";

}

//投篮

public function shoot(){

echo "投篮
";

}

//扣篮

public function dunk(){

echo "扣篮
";

}

//数据访问

public function getAge(){

// echo $this->name."的age=".$this->age."
";

//既然能够在自身类中获取到年龄,那么为了解决NBA球员不想让别人知道自己真实年龄的问题

//我们就可以对年龄进行操作-造假 让年龄更小

$age = $this->age-2;

echo $this->name."的age=".$age."
";

}

}

//创建乔丹对象

$jordon = new NbaPlayer("乔丹","1.98米","98公斤","公牛","23");

$jordon->getAge();//结果Ok 说明年龄是可以获取到的,既然可以获取到age我们在函数内部作假,来达到一个谎报年龄的目的

?>

运行效果如下:

总结:

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

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

PHP面向对象之3种数据访问方式详解(代码实例)的教程已介绍完毕,更多请关注跳墙网其他文章教程!

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

php获取数据3中方式,PHP面向对象之3种数据访问方式详解(代码实例)相关推荐

  1. java弱引用在安卓中有效吗_Android 软引用和弱引用详解及实例代码

    Android 软引用 和 弱引用 1.  SoftReference:软引用-->当虚拟机内存不足时,将会回收它指向的对象:需要获取对象时,可以调用get方法. 2.  WeakReferen ...

  2. python中flush什么意思_python flush()定义及作用详解(实例分析)

    今天这篇文章我们来了解一下python之中的flush,在进入文章之前我们首先要知道我们要学的是什么东西,今天讲的是pythonflush,了解什么是flush,并且知道flash什么意思.这些东西我 ...

  3. layerui js获取数据表格中的动态内容on失效live失效

    layerui js获取数据表格中的动态内容on失效live失效.由于jquery1.9版本之后不再使用live,所以改成on,但直接使用on以layer中又不起作用.于是用下面的语句. $(docu ...

  4. Python中常见的__init__.py是什么意思?详解Python import的方式和原理

    Python中常见的__init__.py是什么意思?详解Python import的方式和原理 1 什么是模块化编程? 2 __init__.py文件的作用 3 Python如何import第三方库 ...

  5. python面向对象编程的三大特性_Python面向对象总结及类与正则表达式详解

    Python3 面向对象 -------------------------------------------------------------------------------- 一丶面向对象 ...

  6. [ASP.NET]ASP.NET中的Inherits、CodeFile、CodeBehind的区别详解及OWIN及IDENTITY

    篇一 : ASP.NET中的Inherits.CodeFile.CodeBehind的区别详解 Inherits.CodeFile.CodeBehind 在 ASP.NET 中使用代码隐藏方法来设计W ...

  7. python中怎么计数_浅谈python中统计计数的几种方法和Counter详解

    1) 使用字典dict() 循环遍历出一个可迭代对象中的元素,如果字典没有该元素,那么就让该元素作为字典的键,并将该键赋值为1,如果存在就将该元素对应的值加1. lists = ['a','a','b ...

  8. C++ 中的this指针详解及实例

    C++ 中的this指针详解及实例 这篇文章主要介绍了C++ 中的this指针详解及实例的相关资料,this指针是类的一个自动生成.自动隐蔽的私有成员,它存在于类的非静态成员中,指向被调用函数所在的对 ...

  9. html内置时间对象,JavaScript中的常用事件,以及内置对象详解

    原标题:JavaScript中的常用事件,以及内置对象详解 今天是刘小爱自学Java的第81天. 感谢你的观看,谢谢你. 话不多说,开始今天的学习: 学前端有一个非常权威的组织,也就是w3c,其有个专 ...

最新文章

  1. supervisor简介、安装与入门使用
  2. ./和../和/三种路径的区别
  3. 由《惊天魔盗团》改编的VR游戏登陆Gear VR
  4. Python学习网络爬虫--转
  5. Linux系统中sysctl命令详解 sysctl -p、sysctl -a、sysctl -w
  6. Docker系列之二:基于容器的自动构建
  7. Mysql sql语句积累
  8. jQuery Mobile动态刷新页面样式
  9. 支付宝:提现免费再延3年,不设上限!
  10. 【剑指offer】Java版代码(完整版)
  11. poj 2499第K短路模板
  12. Ubuntu16.04安装VirtualBox及无法启动的解决办法
  13. NYOJ.904 search(二分查找,快速排序,结构体运用)
  14. MySQL的详细安装教程和配置过程(附安装包)
  15. Axure RP小部件使用教程
  16. 基于JSP的学术交流论坛系统的设计与实现
  17. 云服务器流量是什么东西_云服务器带宽与流量都有什么关系?不限制流量服务器...
  18. XCELSIUS例子---柱形图部件的使用
  19. 未来大龄程序员出路有哪些?
  20. 冒泡排序(Bubble Sort)含gif动图

热门文章

  1. Android出现:java.lang.NoClassDefFoundError: android/os/PersistableBundle
  2. 分布式数据库架构及企业实践--基于Mycat中间件pdf
  3. 020-python函数和常用模块-文件操作
  4. AOJ-351-求最值之差
  5. 转-ios设备唯一标识获取策略
  6. mysql增加自定义函数功能
  7. asp.net 上传大文件控件
  8. 带新手玩转MVC——不讲道理就是干(上)
  9. linux中$@,$*,$0,$$,$?参数的含义
  10. LeetCode-C#实现-链表(#19/21/141/206/707/876)