public:方法或者属性在任何作用域都可以访问到,而且这是默认的,如果没有为一个属性或方法指定访问修饰符,它将是public。
protected:方法或者属性只能从类或者继承类的一个成员中访问到。
private:方法或者属性只能从类的一个成员中访问到,而且无法从继承类的成员中访问到。经过private便签标记的方法或者属性可以在继承类中重新定义。每一个类只能看到它自己定义的私有方法。
- <?php
- class MyClass{
- public $public = 'Public';
- protected $protected = 'Protected';
- private $private = 'Private';
- function printHello()
- {
- echo $this->public;
- echo $this->protected;
- echo $this->private;
- }
- }
- $obj = new MyClass();
- echo $obj->public; // Works
- echo $obj->protected; // Fatal Error
- echo $obj->private; // Fatal Error //私有和受保护的属性都不能直接引用
- $obj->printHello(); // Shows Public, Protected and Private
- /**
- * Define MyClass2
- */
- class MyClass2 extends MyClass{
- // We can redeclare the public and protected method, but not private
- protected $protected = 'Protected2';
- function printHello()
- {
- echo $this->public;
- echo $this->protected;
- echo $this->private;
- }
- }
- $obj2 = new MyClass2();
- echo $obj->public; // Works
- echo $obj2->private; // Undefined //私有属性可以重新定义,但MyClass2里面没有定义
- echo $obj2->protected; // Fatal Error //受保护的属性不能重新定义
- $obj2->printHello(); // Shows Public, Protected2, not Private
- ?>