+ -
当前位置:首页 → 问答吧 → 被反射机制破坏的private和protected….

被反射机制破坏的private和protected….

时间:2011-09-18

来源:互联网



通过PHP的反射机制我们可以在对象外部对它的private和protected成员进行自由的操作,这一点很大程度上提高了编程的便利性,但反射的这种强大的穿透力也让我们在编写某些逻辑时感到很头疼。具体的例子请看代码:
  1. <?php

  2. class api_car
  3. {
  4.         private $grade = 0;

  5.         public function __construct()
  6.         {
  7.                 //根据session等
  8.                 /*
  9.                 if(管理员)
  10.                         $this->grade = 1;
  11.                 */
  12.         }
  13.         public function go()
  14.         {
  15.                 if( $this->grade == 1 )
  16.                 {

  17.                         echo "我开管理员的法拉利!\n";
  18.                 }
  19.                 else
  20.                 {

  21.                         echo "我骑自己的自行车\n";
  22.                 }
  23.         }
  24. }

  25. $car = new api_car();
  26. $p = new ReflectionProperty( "api_car" , "grade" );
  27. $p->setAccessible(true);
  28. $p->setValue($car , "1");

  29. $car->go();
复制代码
结果在意料之中,程序输出”我开管理员的法拉利!\n”。
在为平台开发基础类库的时候,这一点让人很烦。
不知道大家有什么好办法可以禁止通过反射操作某个类的private和protected成员么?

作者: cnan   发布时间: 2011-09-18

貌似没什么好办法,反射是直接在底层实现的,如果没有提供阻止机制的话,只有在底层才有办法禁止了.

作者: qxhy123   发布时间: 2011-09-18