I. Differences between public, private, and protected
Public: the permission is the largest, and can be called internally or by instances.
Protected: protected type, used for calls of this class and inheritance class.
Private: private type, which is only used in this class.
Ii. Instances
Copy codeThe Code is as follows:
<? Php
Error_reporting (E_ALL );
Class test {
Public $ public;
Private $ private;
Protected $ protected;
Static $ instance;
Public function _ construct (){
$ This-> public = 'public <br> ';
$ This-> private = 'private <br> ';
$ This-> protected = 'protected <br> ';
}
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 <br> ";
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 <br> ";
}
Private function pri_function (){
Echo "you request private function <br> ";
}
}
$ 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
?>
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.
Copy codeThe Code is as follows:
<? Php
Class test {
Public $ public;
Private $ private;
Protected $ protected;
Static $ instance;
Public function _ construct (){
$ This-> public = 'public <br> ';
$ This-> private = 'private <br> ';
$ This-> protected = 'protected <br> ';
}
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 <br> ";
Echo $ this-> public;
}
Protected function pro_function (){
Echo "you request protected function <br> ";
Echo $ this-> protected;
}
Private function pri_function (){
Echo "you request private function <br> ";
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 <br> ";
}
Public function pri_extends_function (){
Echo "you request extends_private function <br> ";
}
}
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.
?>
As shown in the preceding example,
Public: the public in test can be inherited.
Private: private in test cannot be inherited.
Protected: protected in test can be inherited.
Static: static in test can be inherited.
Alas, I always don't like to remember these things. When I use them, I always feel wrong and want to check them again. So I will write an example for you to view it easily.