Error_reporting (E_ALL ); Class test { Public $ public; Private $ private; Protected $ protected; Static $ instance; Public function _ construct (){ $ This-> public = 'public '; $ This-> private = 'private '; $ This-> protected = 'protected '; } Static function tank (){ If (! Isset (self: $ instance [get_class ()]) { $ C = get_class (); Self: $ instance = new $ c; } Return self: $ instance; } Public function pub_function (){ Echo "you request public function "; Echo $ this-> public; Echo $ this-> private; // private, which can be called internally Echo $ this-> protected; // protected, which can be called internally $ This-> pri_function (); // private method, which can be called internally $ This-> pro_function (); // protected method, which can be called internally } Protected function pro_function (){ Echo "you request protected function "; } Private function pri_function (){ Echo "you request private function "; } } $ Test = test: tank (); Echo $ test-> public; Echo $ test-> private; // Fatal error: Cannot access private property test: $ private Echo $ test-> protected; // Fatal error: Cannot access protected property test: $ protected $ Test-> pub_function (); $ Test-> pro_function (); // Fatal error: Call to protected method test: pro_function () from context $ Test-> pri_function (); // Fatal error: Call to private method test: pri_function () from context ?> Public = 'public '; $ This-> private = 'private '; $ This-> protected = 'protected ';} Static function tank () {if (! Isset (self ::$ instance [get_class ()]) {$ c = get_class (); self ::$ instance = new $ c;} return self :: $ instance;} public function pub_function () {echo "you request public function "; Echo $ this-> public; echo $ this-> private; // private, you can call echo $ this-> protected internally; // protected, you can call the $ this-> pri_function (); // private method internally. you can call the $ this-> pro_function (); // protected method internally, internal call} protected function pro_function () {echo "you request protected function ";} Private function pri_function () {echo" you request private function ";}}$ Test = test: tank (); echo $ test-> public; echo $ test-> private; // Fatal error: Cannot access private property test :: $ private echo $ test-> protected; // Fatal error: Cannot access protected property test: $ protected $ test-> pub_function (); $ test-> pro_function (); // Fatal error: Call to protected method test: pro_function () from context $ test-> pri_function (); // Fatal error: Call to private method t Est: pri_function () from context?> As shown in the preceding example, Public: it can be called inside the class and instantiated. Private: class can be called internally. if it is instantiated, an error is returned. Protected: it can be called internally by class. if it is instantiated, an error is returned. Class test { Public $ public; Private $ private; Protected $ protected; Static $ instance; Public function _ construct (){ $ This-> public = 'public '; $ This-> private = 'private '; $ This-> protected = 'protected '; } Protected function tank () {// private method cannot be inherited, changed to public, protected If (! Isset (self: $ instance [get_class ()]) { $ C = get_class (); Self: $ instance = new $ c; } Return self: $ instance; } Public function pub_function (){ Echo "you request public function "; Echo $ this-> public; } Protected function pro_function (){ Echo "you request protected function "; Echo $ this-> protected; } Private function pri_function (){ Echo "you request private function "; Echo $ this-> private; } } Class test1 extends test { Public function _ construct (){ Parent: tank (); Parent: :__ construct (); } Public function tank (){ Echo $ this-> public; Echo $ this-> private; // Notice: Undefined property: test1 ::$ private Echo $ this-> protected; $ This-> pub_function (); $ This-> pro_function (); $ This-> pri_function (); // Fatal error: Call to private method test: pri_function () from context 'test1' } Public function pro_extends_function (){ Echo "you request extends_protected function "; } Public function pri_extends_function (){ Echo "you request extends_private function "; } } Error_reporting (E_ALL ); $ Test = new test1 (); $ Test-> tank (); // The subclass and its parent class have attributes and methods of the same name. When instantiating the subclass, the attributes and methods in the subclass will overwrite the parent class. ?> |