This article describes the differences between public, private, and protected in phpclass and detailed analysis of instances. For more information, see
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
The code is as follows:
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
?>
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.
The code is as follows:
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.
?>
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.