<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      在 PHP 中,類的繼承(繼承)是一種機制,允許一個類繼承另一個類的屬性和方法,從而實現代碼的重用和擴展。繼承可以幫助你創建一個基于現有類的新類,保留原有類的特性并增加或修改其功能。

          class Animal {
      
              public $name='dongwu';
              protected $age=1;
              private $birth='2024';
         }  
          
          class Cat extends Animal{}    //使用extends 關鍵字繼承父類 注意花括號后面沒有分號
          
          var_dump(new Animal);
          var_dump(new Cat);

      var_dump 2個類看看內容,除了名字不同,內容都是一樣的。

      [Running] D:\ceshi.test\3.php"
      object(Animal)#1 (3) {
        ["name"]=>
        string(6) "dongwu"
        ["age":protected]=>
        int(1)
        ["birth":"Animal":private]=>
        string(4) "2024"
      }
      object(Cat)#1 (3) {
        ["name"]=>
        string(6) "dongwu"
        ["age":protected]=>
        int(1)
        ["birth":"Animal":private]=>
        string(4) "2024"
      }
       
      接下來嘗試調用Animal類的變量
          class Animal {
      
              public $name='dongwu';
              protected $age=1;
              private $birth='2024';
         }  
          
          class Cat extends Animal{}
          
          $obj = new Cat;
          echo $obj->name;   //只有這個public 的name可以被打印
          echo $obj->age;    //雖然是子類可以拿到,但是是在類的內部可以拿到,外部想要拿到的話,需要使用函數的方式拿到
          echo $obj->birth;  //私有類型的,子類無法拿到

      接下來演示如何拿到protected的age

       class Animal {
      
              public $name='dongwu';
              protected $age=1;
              private $birth='2024';
         }  
          
          class Cat extends Animal{
      
              function getage(){    //使用方法拿到age,由此可見protected類型的變量只能在類的內部拿到
                  
                  echo $this->age;
              }
      
          }
      
          
          $obj = new Cat;
         
          echo $obj->getage();

      回顯如下:

      [Running] D:\ceshi.test\3.php"
      1
       
      接下來再看下面的這段代碼
          class Animal {
      
              protected $name;
      
              public function __construct($name){
      
                  $this->name =$name;        //通過構造函數賦值給類里面的name變量
              }
      
              public function eat(){
      
                  echo $this->name. ' is eatting';
              }
         }  
      
         class Cat extends Animal{
             
              public function meow(){      //子類自有的方法
      
                  echo $this->name.'is meowing';
              }
         }
      
         $cat = new Cat('lanmao');
      
         var_dump($cat);
         $cat->eat();
         $cat->meow();

      回顯如下:

      [Running] D:\ceshi.test\3.php"
      object(Cat)#1 (1) {
        ["name":protected]=>
        string(6) "lanmao"
      }
      lanmao is eattinglanmaois meowing
      由此可見 vardump只能打印出父類的變量(屬性),而不能打印出方法。實際是可以繼承過來的,只是無法通過vardump打印出來。比如父類的構造方法和其他方法都被繼承了過來。
       
      類方法和屬性(變量)的重寫
      如果從父類繼承的方法或屬性不能滿足子類的需求,可以對其進行改寫,下面的這段代碼中父類雖然有了eat方法,但是子類在繼承后又重寫了eat方法,所以會執行子類的eat方法而忽略父類的eat方法
        class Animal {
      
              protected $name;
      
              public function __construct($name){
      
                  $this->name =$name;
              }
      
              public function eat(){
      
                  echo $this->name. ' is eatting';  //雖然父類中有了eat方法
              }
         }  
      
         class Cat extends Animal{
             
              public function eat(){
      
              echo $this->name. ' is eatting2';  //子類重寫了eat方法后,會忽略父類中的eat方法
      
              }
      
              public function meow(){
      
                  echo $this->name.'is meowing';
              }
         }
      
         $cat = new Cat('lanmao');
      $cat->eat();

      回顯如下:

      [Running] D:\ceshi.test\3.php"
      lanmao is eatting2
      同樣,屬性(變量)也可以重寫,看下面的例子
       class Animal {
      
              protected $name='fish';    //初始值設置為fish
      
              public function eat(){
      
                  echo $this->name. ' is eatting';
              }
         }  
      
         class Cat extends Animal{
             
              protected $name='fox';   //子類中重寫屬性
      
              public function meow(){
      
                  echo $this->name.' is meowing';
              }
         }
      
         $cat = new Cat();
      
         $cat->meow();
         

      回顯如下:

      [Running] D:\ceshi.test\3.php"
      foxis meowing
       
       final 關鍵字
      作用:
      防止類被集成  
      防止類的方法被重寫
       
      先看阻止類方法重寫
      class Animal {
      
              protected $name;
      
              public function __construct($name){
      
                  $this->name =$name;
              }
      
         final public function eat(){    //類方法前加上final,則這個類無法被繼承
      
                  echo $this->name. ' is eatting';
              }
         }  
      
         class Cat extends Animal{
             
              public function eat(){
      
              echo $this->name. ' is eatting2';
      
              }
      
              public function meow(){
      
                  echo $this->name.'is meowing';
              }
         }
      
         $cat = new Cat('lanmao');$cat->eat();

      回顯如下:

      [Running] D:\ceshi.test\3.php
      PHP Fatal error:  Cannot override final method Animal::eat() in D:\phpstudy_pro\WWW\ceshi.test\3.php on line 30
      Fatal error: Cannot override final method Animal::eat() in D:\phpstudy_pro\WWW\ceshi.test\3.php on line 30
       
      再看阻止類繼承
        final class Animal {      //此處加上final來阻止類被繼承
      
              protected $name;
      
              public function __construct($name){
      
                  $this->name =$name;
              }
      
          public function eat(){
      
                  echo $this->name. ' is eatting';
              }
         }  
      
         class Cat extends Animal{
             
              public function eat(){
      
              echo $this->name. ' is eatting2';
      
              }
      
              public function meow(){
      
                  echo $this->name.'is meowing';
              }
         }
      
         $cat = new Cat('lanmao');$cat->eat();

      回顯如下:

      [Running] D:\ceshi.test\3.php"
      PHP Fatal error:  Class Cat may not inherit from final class (Animal) in D:\phpstudy_pro\WWW\ceshi.test\3.php on line 30
      Fatal error: Class Cat may not inherit from final class (Animal) in D:\phpstudy_pro\WWW\ceshi.test\3.php on line 30
       
       在 PHP 中,可以通過 parent:: 關鍵字在子類中調用父類的方法。例如:
      class ParentClass {
          public function greet() {
              echo "Hello from ParentClass!";
          }
      }
      
      class ChildClass extends ParentClass {
          public function greet() {
              // 調用父類的 greet() 方法
              parent::greet();
              echo " And hello from ChildClass!";
          }
      }
      
      $child = new ChildClass();
      $child->greet();

      回顯如下:

      [Running] D:\ceshi.test\6.php"
      Hello from ParentClass! And hello from ChildClass!
       
      繼續看調用父類的構造函數
      class ParentClass {
          public function __construct($name) {
              echo "ParentClass constructor with name: $name";   //父類的構造函數有一個name傳進來
          }
      }
      
      class ChildClass extends ParentClass {
          public function __construct($name, $age) {
              // 調用父類的構造函數
              parent::__construct($name);
              echo "ChildClass constructor with age: $age";  //不僅能輸出自己的構造函數,還能輸出父類的構造函數
          }
      }
      
      $child = new ChildClass('Alice', 25);

      回顯如下:

      [Running] D:\ceshi.test\6.php"
      ParentClass constructor with name: Alice
      ChildClass constructor with age: 25
       
      同樣,也可以重寫父類繼承過來的構造函數
       
      class ParentClass {
          public function __construct($name) {
              echo "ParentClass constructor with name: $name";
          }
      }
      
      class ChildClass extends ParentClass {
          public function __construct($age) {
              // 直接重寫繼承自父類的構造函數,需要注意的是父類的構造函數本身不會受到影響
              echo "ChildClass constructor with age: $age";
          }
      }

      回顯如下:

      [Running] D:\ceshi.test\6.php"
      ChildClass constructor with age: 25
       
      靜態延遲綁定static 
      是指在運行時根據實際調用的類來確定靜態方法或屬性的綁定
      static::$name
      來看下面這段代碼
      在這個示例中,self::$namestatic::$name 的行為是不同的。self::$name 在任何情況下都指向 Animal 類的 $name 屬性,而 static::$name 使用的是靜態延遲綁定,這意味著它會指向當前調用 eat() 方法的類的 $name 屬性。由于你是通過 Animal::eat() 調用的,結果如下:
      <?php
      
      class Animal {
      
          protected static $name = 'Animal';
      
          public static function eat() {
              echo self::$name . ' is eating';
              echo '----';
              echo static::$name . ' is eating';
          }
      
      }
      
      Animal::eat();
      
      ?>
      [Running] D:\ceshi.test\6.php"
      Animal is eating----Animal is eating
      如果你有子類 Dog 繼承自 Animal,并重寫 $name 屬性,調用 Dog::eat() 將會展示不同的結果:
      <?php
      
      class Animal {
      
          protected static $name = 'Animal';
      
          public static function eat() {
              echo self::$name . ' is eating';
              echo '----';
              echo static::$name . ' is eating';
          }
      
      }
      
      class Dog extends Animal {
          protected static $name = 'Dog';
      }
      
      Dog::eat();
      
      ?>
      [Running] D:\phpstudy_pro\Extensions\php\php7.3.4nts\php.exe "d:\phpstudy_pro\WWW\ceshi.test\6.php"
      Animal is eating----Dog is eating
      此時static::$name 使用靜態延遲綁定,指向實際調用方法的類 Dog 中的 $name 屬性。由于 Dog 類覆蓋了 Animal 類的 $name 屬性,所以 static::$name 輸出的是 Dog.這就是靜態綁定
       
      posted on 2024-08-29 09:52  wilson'blog  閱讀(153)  評論(0)    收藏  舉報

      主站蜘蛛池模板: 国内外成人综合免费视频| 国产精品无码成人午夜电影| 西西444www高清大胆| 国产二区三区不卡免费 | 国产三级精品三级在线看| √8天堂资源地址中文在线| 色偷偷女人的天堂亚洲网| 亚洲综合伊人五月天中文| 野花社区视频www官网| 成人av专区精品无码国产| 国产精品不卡区一区二| 无码日韩精品一区二区三区免费| 日本道不卡一二三区视频| 国产精品免费AⅤ片在线观看| 久久五月丁香合缴情网| 无码抽搐高潮喷水流白浆| 一本大道色婷婷在线| 久久天堂无码av网站| 国产亚洲一二三区精品| 亚洲精品中文字幕无码蜜桃| a4yy私人毛片| 亚洲欧洲精品成人久久曰| 国内精品视频一区二区三区八戒 | 337p西西人体大胆瓣开下部| 千阳县| 国内精品自线在拍| 久久九九久精品国产免费直播| xbox免费观看高清视频的软件| 国产精品亚洲二区在线播放| 亚洲蜜臀av乱码久久| 国产在线观看免费观看不卡| 免费无码一区无码东京热| 苗栗县| 成人无码一区二区三区网站| 樱桃熟了a级毛片| 免费观看全黄做爰大片| 国产网友愉拍精品视频手机| 太保市| 亚洲av日韩av永久无码电影| 亚洲伊人久久综合成人| 亚洲qingse中文字幕久久|