php class中public,private,protected,static的區別,以及例項
一,public,private,protected的區別
public:許可權是最大的,可以內部呼叫,例項呼叫等。
protected: 受保護型別,用於本類和繼承類呼叫。
private: 私有型別,只有在本類中使用。
二,例項
- <?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,內部可以呼叫
- echo $this->protected; //protected,內部可以呼叫
- $this->pri_function(); //private方法,內部可以呼叫
- $this->pro_function(); //protected方法,內部可以呼叫
- }
- 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
- ?>
從上面的例子中,我們可以看出,
public: 可以class內部呼叫,可以例項化呼叫。
private: 可以class內部呼叫,例項化呼叫報錯。
protected: 可以class內部呼叫,例項化呼叫報錯。
- <?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(){ //私有方法不能繼承,換成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(); //子類和父類有相同名字的屬性和方法,例項化子類時,子類的中的屬性和方法會蓋掉父類的。
- ?>
從上面的例子中,我們可以看出,
public: test中的public可以被繼承。
private: test中的private不可以被繼承。
protected: test中的protected可以被繼承。
static: test中的static可以被繼承。
相關文章
- 【Java】private,protected,public,default的區別(形象生動)Java
- static,private,final,abstract,protected
- private,public,protected,static不可以修飾區域性變數,方法裡的變數變數
- public, private, protected 訪問許可權訪問許可權
- self::class和static::class的區別
- PHP static 關鍵字和 self 關鍵字例項化的區別PHP
- static inner class和非static inner class的例項化問題(can only instantiate non-static inner class...)
- java中public,protected,private關鍵字以及預設訪問許可權修飾符的用法細節Java訪問許可權
- #Java教程:訪問修飾符:public、protected、預設、private @FDDLCJava
- Ruby的private和protected
- PHP 中 bind 的用法 self 和 static 的區別PHP
- 教你如何直接訪問php例項物件的private屬性PHP物件
- PHP new self()和new static()的區別PHP
- C++中類繼承public,protected和private關鍵字作用詳解及派生類的訪問許可權C++繼承訪問許可權
- PHP中的staticPHP
- var和public的區別
- Python 訪問限制 private publicPython
- 靜態方法和例項方法的區別以及如何恰當使用
- C++ VS單例模式報 錯誤 LNK2001 無法解析的外部符號 private: static class SingletonPattern錯誤C++單例模式符號
- swift中Class和Struct的區別SwiftStruct
- TypeScript中,type、interface、class的區別TypeScript
- php語法同java語法的基本區別(例項專案需求,php才能熟)PHPJava
- PHP弱型別引發的漏洞例項PHP型別
- PHP審計之class_exists與任意例項化漏洞PHP
- php例項化物件的例項方法PHP物件
- const與static的區別
- static 和extern的區別
- 28、Static Nested Class 和 Inner Class的不同。
- 如何區分例項化網格中的每個例項
- TypeScript 中 class 的例項成員與靜態成員TypeScript
- 例項物件和函式物件的區別物件函式
- PHP 中`Closure`和`Callable`的區別以及在 Redis 訂閱方法中的使用PHPRedis
- const、define 和 static 的區別
- 類例項物件的class型別卻不屬於該類,何解?物件型別
- PHP 中的 -> 和 :: 的區別PHP
- CSS中的class與id區別及用法CSS
- GitHub的Repository許可權將public轉為privateGithub
- Python中類方法和例項方法有什麼區別?Python