16:PHP类的访问控制(可见性)

对属性或方法的访问控制,是通过在前面添加关键字 public(公有),protected(受保护)或 private(私有)来实现的。被定义为公有的类成员可以在任何地方被访问。被定义为受保护的类成员则可以被其自身以及其子类和父类访问。被定义为私有的类成员则只能被其定义所在的类访问。

php类的权限控制

 

一、属性的访问控制

类属性必须定义为公有,受保护,私有之一。如果用 var 定义,则被视为公有。

  1. <?php
  2. class  MyClass
  3. {
  4.     public  $public  =  'Public' ;
  5.     protected  $protected  =  'Protected' ;
  6.     private  $private  =  'Private' ;
  7.     function  printHello ()
  8.     {
  9.         echo  $this ->public ;
  10.         echo  $this ->protected ;
  11.         echo  $this ->private ;
  12.     }
  13. }
  14. $obj  = new  MyClass ();
  15. echo  $obj ->public ;  // 这行能被正常执行 Public
  16. echo  $obj ->protected ;
  17. // 这行会产生一个致命错误:Fatal error: Cannot access protected property MyClass::$protected
  18. echo  $obj ->private ;
  19. // 这行也会产生一个致命错误:Fatal error: Cannot access protected property MyClass::$protected
  20. $obj -> printHello ();  //去掉上面两行;则会输出 Public Public、Protected 和 Private

 

二、方法的访问控制

类中的方法可以被定义为公有,私有或受保护。如果没有设置这些关键字,则该方法默认为公有。

  1. <?php
  2. class  MyClass
  3.  {
  4.      // 声明一个公有的构造函数
  5.      public function  __construct () { }
  6.      // 声明一个公有的方法
  7.      public function  MyPublic () { }
  8.      // 声明一个受保护的方法
  9.      protected function  MyProtected () { }
  10.      // 声明一个私有的方法
  11.      private function  MyPrivate () { }
  12.      // 此方法为公有
  13.      function  Foo ()
  14.     {
  15.          $this -> MyPublic ();
  16.          $this -> MyProtected ();
  17.          $this -> MyPrivate ();
  18.     }
  19. }
  20. $myclass  = new  MyClass ;
  21.  $myclass -> MyPublic ();  // 这行能被正常执行
  22.  $myclass -> MyProtected ();  // 这行会产生一个致命错误
  23.  $myclass -> MyPrivate ();  // 这行会产生一个致命错误
  24.  $myclass -> Foo ();  // 公有,受保护,私有都可以执行

 

三、其它对象的访问控制

同一个类的对象即使不是同一个实例也可以互相访问对方的私有与受保护成员。这是由于在这些对象的内部具体实现的细节都是已知的。

  1. <?php
  2.  class  Test
  3.  {
  4.     private  $foo ;
  5.     public function  __construct ( $foo )
  6.     {
  7.          $this -> foo  =  $foo ;
  8.     }
  9.     private function  bar ()
  10.     {
  11.         echo  '访问私有方法。' ;
  12.     }
  13.     public function  baz ( Test $other )
  14.     {
  15.          // 改变私有变量
  16.          $other -> foo  =  'hello' ;
  17.          var_dump ( $other -> foo );
  18.          // 调用私有方法
  19.          $other -> bar ();
  20.     }
  21. }
  22. $test  = new  Test ( 'test' );
  23. $test -> baz (new  Test ( 'other' ));//string(5) "hello" 访问私有方法。

 

public:类的内部,外部都允许访问;允许子类继承,允许子类修改;

protected:类的内部允许访问,外部不允许访问;允许子类继承,允许子类修改;

private:类的内部允许访问,外部不允许访问;不允许子类继承,不允许子类修改;

    A+
发布日期:2017年01月01日 19:22:03  所属分类:PHP教程
最后更新时间:2017-01-01 19:27:32
付杰
  • ¥ 298.0元
  • 市场价:398.0元
  • ¥ 298.0元
  • 市场价:498.0元
  • ¥ 499.0元
  • 市场价:499.0元
  • ¥ 298.0元
  • 市场价:498.0元

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: