首页 >后端开发 >php教程 >php面向对象之数据隐藏

php面向对象之数据隐藏

巴扎黑
巴扎黑原创
2017-04-18 13:29:252732浏览

什么是数据隐藏?

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

友情提示:

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

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

(1)public

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

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

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

(2)private

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

private实例展示:

<?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 &#39;我的名字叫&#39;;
$preson ->setName("布里茨");    //通过访问成员方法进行赋值
echo $preson -> getName();      //在通过访问成员方法进行访问
//错误的使用方式
echo &#39;我的名字叫&#39;;
echo Preson :: $name;

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

(3)protected

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

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

protected的实例展示:

<?php
header("content-type:text/html;charset=utf-8");
class Preson{
   protected $name = &#39;维克托&#39;;
}
class Preson1 extends Preson{
   public function showName(){
       echo &#39;只有真确的调用,我才会出现&#39;;
       echo &#39;<br/>&#39;;
       echo &#39;我的名字是:&#39; . $this ->name;
       echo &#39;<br/>&#39;;
   }
}
$preson = new Preson1();
$preson -> showName();
echo &#39;你调用错了,所以下面不报错算我输:&#39;;
$preson -> name = &#39;德莱文&#39;;

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

提示:

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

以上是php面向对象之数据隐藏的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn