public:方法或者属性在任何作用域都可以访问到,而且这是默认的,如果没有为一个属性或方法指定访问修饰符,它将是public。

protected:方法或者属性只能从类或者继承类的一个成员中访问到。

private:方法或者属性只能从类的一个成员中访问到,而且无法从继承类的成员中访问到。经过private便签标记的方法或者属性可以在继承类中重新定义。每一个类只能看到它自己定义的私有方法。

 

  1. <?php   
  2. class MyClass{   
  3. public $public = 'Public';   
  4. protected $protected = 'Protected';   
  5. private $private = 'Private';   
  6. function printHello()   
  7. {   
  8. echo $this->public;   
  9. echo $this->protected;   
  10. echo $this->private;   
  11. }   
  12. }   
  13. $obj = new MyClass();   
  14. echo $obj->public; // Works   
  15. echo $obj->protected; // Fatal Error   
  16. echo $obj->private; // Fatal Error                //私有和受保护的属性都不能直接引用   
  17. $obj->printHello(); // Shows Public, Protected and Private   
  18. /**
  19. * Define MyClass2
  20. */  
  21. class MyClass2 extends MyClass{   
  22. // We can redeclare the public and protected method, but not private   
  23. protected $protected = 'Protected2';   
  24. function printHello()   
  25. {   
  26. echo $this->public;   
  27. echo $this->protected;   
  28. echo $this->private;   
  29. }   
  30. }   
  31. $obj2 = new MyClass2();   
  32. echo $obj->public; // Works   
  33. echo $obj2->private; // Undefined                  //私有属性可以重新定义,但MyClass2里面没有定义   
  34. echo $obj2->protected; // Fatal Error                 //受保护的属性不能重新定义   
  35. $obj2->printHello(); // Shows Public, Protected2, not Private   
  36. ?>