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

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

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

 

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