什么是数据隐藏?

 

看到这个有的人会觉得挺不理解的。在前面的文章中,介绍类的时候,我们说定义变量用的关键词是public,但是不止这一个,还有public、private、protected、static和final,这些关键词是用来限定类成员,包括变量和方法的访问权限的。接下来,我们就先讲解前三个关键词的用法​

友情提示:

对成员变量和成员方法进行限定在关键字的使用上都是一样的。所以这里我们只以成员变量为例说明这几种关键字的不同用法。对于成员方法同样适用。

下面,我们来具体介绍这几个关键词:

(1)public

中文翻译是公共的。顾名思义,就是公开的,不需要隐藏的数据信息。可以在程序中的任何位置(类内、类外)被其他的类和对象调用。子类可以继承和使用父类中所有的公共成员。

在讲解本章之前,我们定义变量和方法的声明都是用public,而所有的方法在默认状态下也是public,所以对变量和方法的调用显得十分混乱。为了解决这个情况,我们将要讲述第二个关键字private。

因为之前都是用的public,所以这里我们就不举例子了。

(2)private

中文翻译为私人的,私有的。被private修饰的变量和方法,只能在所在的类的内部被调用和修改,不可以在类的外部被访问。在子类中也不可以。

private实例展示:


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21




​<?php​

​header(​​​​"content-type:text/html;charset=utf-8"​​​​);​

​class​​ ​​Preson{​

​private​​ ​​$name​​ ​​= ​​​​"雷克赛"​​​​;​

​public​​ ​​function​​ ​​setName(​​​​$name​​​​){​

​$this​​ ​​-> name = ​​​​$name​​​​;​

​}​

​public​​ ​​function​​ ​​getName(){​

​return​​ ​​$this​​ ​​->name;​

​}​

​}​

​class​​ ​​Preson1 ​​​​extends​​ ​​Preson{​

​}​

​$preson​​ ​​= ​​​​new​​ ​​Preson();​

​//正确的使用方式​

​echo​​ ​​'我的名字叫'​​​​;​

​$preson​​ ​​->setName(​​​​"布里茨"​​​​);    ​​​​//通过访问成员方法进行赋值​

​echo​​ ​​$preson​​ ​​-> getName();      ​​​​//在通过访问成员方法进行访问​

​//错误的使用方式​

​echo​​ ​​'我的名字叫'​​​​;​

​echo​​ ​​Preson :: ​​​​$name​​​​;​


上述实例中,对私有变量$name的修改与访问,只能通过调用成员方法来实现。如果直接调用,就会发生错误。

(3)protected

中文翻译为保护的意思。private关键字可以将数据完全隐藏,除了在本类中,别的地方都不可以调用,子类中也不可以。但是有些情况是部分变量需要在子类中可以调用,但是对另外的类来说,还是要做到封装。这个时候就要用到我们的protected关键字了。

用protected修饰的类成员,可以在本类和子类中被调用,但是在其他地方不能被调用。

protected的实例展示:


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17




​<?php​

​header(​​​​"content-type:text/html;charset=utf-8"​​​​);​

​class​​ ​​Preson{​

​protected​​ ​​$name​​ ​​= ​​​​'维克托'​​​​;​

​}​

​class​​ ​​Preson1 ​​​​extends​​ ​​Preson{​

​public​​ ​​function​​ ​​showName(){​

​echo​​ ​​'只有真确的调用,我才会出现'​​​​;​

​echo​​ ​​'<br/>'​​​​;​

​echo​​ ​​'我的名字是:'​​ ​​. ​​​​$this​​ ​​->name;​

​echo​​ ​​'<br/>'​​​​;​

​}​

​}​

​$preson​​ ​​= ​​​​new​​ ​​Preson1();​

​$preson​​ ​​-> showName();​

​echo​​ ​​'你调用错了,所以下面不报错算我输:'​​​​;​

​$preson​​ ​​-> name = ​​​​'德莱文'​​​​;​


上述实例中,先用关键词protected声明一个变量,然后再子类的方法中调用一次,最后在类外直接调用一次,结果一目了然。

提示:

虽然在PHP中没有对修饰变量的关键字做强制性的规定和要求,但从面相对象的特征和设计方面考虑,一般使用private和protected关键字来修饰变量,以防止变量在类外被直接修改和调用。

以上就是php面向对象之数据隐藏的详细内容,