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中public private protected default的區別Java
- JavaScript實現類的private、protected、public、static以及繼承JavaScript繼承
- 請說出作用域public,private,protected,以及不寫時的區別
- java中的 public protected friendly privateJava
- 【Java】private,protected,public,default的區別(形象生動)Java
- C#中public、private、protected、internal、protected internal (轉載)C#
- private,public,protected,static不可以修飾區域性變數,方法裡的變數變數
- Public Private VIP的區別
- C++中的三種繼承public,protected,private(轉)C++繼承
- public, private, protected 訪問許可權訪問許可權
- Public與Private的區別 (轉)
- self::class和static::class的區別
- 三種繼承的方法:public 繼承/private繼承/protected繼承詳解及區別繼承
- 面試題 private protected public default修飾符的 作用域面試題
- 再學Java 之 private、protected、public和default的作用域Java
- java中public,protected,private關鍵字以及預設訪問許可權修飾符的用法細節Java訪問許可權
- PHP static 關鍵字和 self 關鍵字例項化的區別PHP
- #Java教程:訪問修飾符:public、protected、預設、private @FDDLCJava
- Oracle RAC環境下vip/public/private IP的區別Oracle
- PHP 中 bind 的用法 self 和 static 的區別PHP
- PHP new self()和new static()的區別PHP
- PHP中new static()與new self()的區別異同分析PHP
- Java中static、final、static final的區別Java
- 教你如何直接訪問php例項物件的private屬性PHP物件
- Oracle中truncate和delete的區別(例項)Oracledelete
- PHP中的staticPHP
- C++繼承詳解:共有(public)繼承,私有(private)繼承,保護(protected)繼承C++繼承
- C++中類繼承public,protected和private關鍵字作用詳解及派生類的訪問許可權C++繼承訪問許可權
- 【JAVA】Class.forName用法以及和new的區別Java
- c# public_protected_private許可權訪問符_屬性訪問器get_setC#
- var和public的區別
- swift中Class和Struct的區別SwiftStruct
- JS中class和id的區別JS
- TypeScript中,type、interface、class的區別TypeScript
- RAC中的各種IP-PUBLIC-VIP-Private-SCAN IP
- 為什麼類和介面不能使用private和protected?介面的方法不能使用private、protected、default
- 靜態方法和例項方法的區別以及如何恰當使用
- 【PHP】Yii2中事務的使用以及程式碼例項PHP