php class中self,parent,this的區別以及實例介紹_PHP教程

      編輯Tag賺U幣

      推薦:php判斷終端是手機還是電腦訪問網站的思路及代碼
      解下來將寫個小程序使用php判斷終端是手機還是電腦訪問網站,感興趣的朋友可以參考下哈,希望對你學習php有所幫助

      一,this

      1,要用this,你必有是一個對像的形勢,不然它會報錯的,Fatal error: Using $this when not in object context。
      2,this可以調用本類中的方法和屬性,也可以調用父類中的可以調的方法和屬性

      二,self

      1,self可以訪問本類中的靜態屬性和靜態方法,可以訪問父類中的靜態屬性和靜態方法。
      2,用self時,可以不用實例化的


      三,parent

      1,parent可以訪問父類中的靜態屬性和靜態方法。
      2,用parent時,可以不用實例化的

      復制代碼 代碼如下:www.wf0088.com

      <?php

      class test{
      public $public;
      private $private;
      protected $protected;
      static $instance;
      static $good = 'tankzhang <br>';
      public $tank = 'zhangying <br>';

      public function __construct(){
      $this->public = 'public <br>';
      $this->private = 'private <br>';
      $this->protected = 'protected <br>';

      }
      public 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;
      }
      static function sta_function(){
      echo "you request static function<br>";
      }
      }

      class test1 extends test{

      static $love = "tank <br>";
      private $aaaaaaa = "ying <br>";

      public function __construct(){
      parent::tank();
      parent::__construct();
      }
      public function tank(){
      echo $this->public;
      echo $this->protected;
      echo $this->aaaaaaa;
      $this->pro_function();
      }

      public function test1_function(){
      echo self::$love;
      echo self::$good;
      echo parent::$good;
      echo parent::$tank; //Fatal error: Access to undeclared static property: test::$tank
      echo self::$tank; //Fatal error: Access to undeclared static property: test::$tank
      }
      static function extends_function(){
      parent::sta_function();
      self::pro_function();
      echo "you request extends_private function<br>";
      }
      }

      error_reporting(E_ALL);
      $test = new test1();
      $test->tank(); //子類和父類有相同名字的屬性和方法,實例化子類時,會調用子類中的方法。
      test1::test1_function();
      test1::extends_function(); //執行一部分后,報Fatal error: Using $this when not in object context in D:\xampp\htdocs\mytest\www4.php on line 32
      ?>

      1,當我們調用$test->tank(); 這個方法時,tank里面的$this是一個對像 ,這個對像可以調用本類,父類中的方法和屬性,

      2,test1::test1_function(); 當我們用靜態的方法去調用非靜態方法時,會顯示警告的,Non-static method test::test1_function() should not be called statically可以看出不,self可以調用本類,父類中的靜態屬性 ,parent可以調用父類中的靜態屬性 ,二者調用非靜態屬性會報錯。代碼中有注釋

      3,test1::extends_function(); 這一步會報錯,報在非對像中使用$this 。為什么會這樣呢,test1::extends_function();只是調用了class中的一個方法,并沒有實例化,所以根本不存在什么對像,當父類中用到$this時,就會報錯

      分享:PHP中::、-gt;、self、$this幾種操作符的區別介紹
      這篇文章主要介紹PHP中幾種比較常用的操作符的區別,特分享下,方便需要的朋友

      來源:模板無憂//所屬分類:PHP教程/更新時間:2013-04-25
      相關PHP教程