class demo1 { public function test1(){ echo '这是一个公有方法,可以随意调用!' } protected function test2(){ $this->test1();//在类中调用自身的方法 echo '这是一个受保护的方法,只能被自己或其子类或父类调用或覆盖' } private function test3(){ echo '这是一个私有的方法,只能被自身所在的类调用' } final public function test4(){ echo '如果父类的方法被声明为final,则子类无法覆盖该方法。如果一个类被生命为final,则不能被继承' } static public function test5(){ echo '这是一个静态公有的方法,可以不实例化类而直接调用'; } public $prop1 = '这是一个公有的属性,可以随意调用或覆盖!'; protected $prop2 = '这是一个受保护的属性,只能被自身或父类、子类调用或覆盖!'; private $prop3 = '这是一个私有的属性,只能够自身调用!'; static public $prop4 = '这是一个静态公有的属性,可以不实例化类而直接调用,静态属性不能通过一个类已实例化的对象来访问(但静态方法可以)。由于静态方法不需要通过对象即可调用,所以伪变量 $this 在静态方法中不可用。静态属性不可以由对象通过 -> 操作符来访问。'; } demo1::test5();//静态方法,可以不实例化而直接调用 demo1::$prop4;//调用静态属性 $shuchu = new demo1; $shuchu->test1(); $shuchu->test2();//这一行会产生致命错误,因为他们是私有的或者受保护的,不能被外部调用 $shuchu->test3();//这一行会产生致命错误,因为他们是私有的或者受保护的,不能被外部调用 $shuchu->test4(); $shuchu->$prop1;//调用属性 class demo2 extends demo { protected function test6(){ parent::test1();//始终是调用父类的公有方法 parent::test2();//始终是调用父类受保护的方法 $this->test1();//如果子类中有自己的方法,则调用自己的,如果没有,调用父类的 parent::$prop1;//调用父类的方法 $this->$prop1;//调用父类的属性 } public function test7(){ $this->test6(); } } $shuchu2 = new demo2; $shuchu2->test7();