首頁  >  文章  >  後端開發  >  PHP類別相關知識點實例總結

PHP類別相關知識點實例總結

高洛峰
高洛峰原創
2016-12-21 13:54:571029瀏覽

本文實例總結了PHP類相關知識點。分享給大家供大家參考,具體如下:

最終類別與最終方法

如果父類別中的方法被宣告為 final,則子類別無法覆寫該方法。如果一個類別被宣告為 final,則不能被繼承。

final class a{}
class a{
  final public function A(){}
}

   

抽象類別與抽象方法

abstract class a {
  public abstract function func();
}
class A extends a{
  public function func(){}
}

   

① 一個類別可以使用abstract 宣告為抽象類別,只使用其他類型的例子類別。

abstract class name{}

   

② 一個方法可以使用abstract宣告為抽象方​​法;抽象方法只需要宣告方法頭,不需要大括號部分的方法體。

abstract public function name($val);

   

③ 一個類別中有抽象方法,則該類別必須宣告為抽象類別。

④ 子類別繼承自一個抽象類,則子類別不行實作父類別中的所有抽象方法,除非子類別也繼續作為抽象類別。

⑤ 子類別實作抽象父類別的方法時,存取控制符範圍不能降低,且方法的參數也必須一致(重寫)。

介面

介面可以看作是抽象類別的更高層次的抽象,可以說是抽象類別的特例

interface a{
  function func();
}
class A implements a {
  function func(){}
}

   

類:屬性、類常數、方法

類:屬性、類常數、方法

類:屬性、類常數、方法

、抽象方法

介面:介面常數、抽象方法

① 相較於抽象類,介面可實現'多重繼承'

class A implements a,b,c{}

   

其中方法都是抽象方法不用abstract修飾,即下級類別要麼實作介面的方法(implements),要麼也宣告為抽象方​​法

重載技術

1. 屬性重載:如果使用一個不存在的屬性,就會呼叫類別中預先定義好的某個方法來處理資料;

對於屬性不用的應用場景,做如下處理

① 取值:自動呼叫類別中的__get()
② 賦值:自動呼叫類別中賦值的__set()
③ 判斷是否存在:自動呼叫類別中的__isset()
④ 銷毀:自動呼叫類別中的__unset()

前提是預先定義好這些方法,否則會報錯

interface a extends b{}

   

運作結果如下:

<?php
class bee{
  public $ol = array();
  public function __get($key){
    if(isset($this->ol[$key])){
      return $this->ol[$key];
    }
    return $key.&#39; not exists&#39;;
  }
  public function __set($key,$val){
    $this->ol[$key] = $val;
  }
  public function __isset($key){
    if(isset($this->ol[$key])){
      return true;
    }
    return false;
  }
  public function __unset($key){
    unset($this->ol[$key]);
  }
}
$obj = new bee();
echo $obj->one;
echo &#39;<br>&#39;;
$obj->one = 1;
echo $obj->one;
echo &#39;<br>&#39;;
var_dump(isset($obj->one));

   

2. 方法重載:如果使用一個不存在的方法,就會調用類別中預先定義好的某個方法以處理該行為;不用

對於方法的應用場景,做如下處理

① 在物件中呼叫不可存取的方法:__call()

② 靜態方式中呼叫不可存取方法:__callStatic()

one not exists
1
boolean true

   

<?php
class bee{
  public function __call($name,$arr){
    echo &#39;<br>&#39;;
    echo &#39;function &#39;.$name.&#39; not exist&#39;;
  }
  static function __callStatic($name,$arr){
    echo &#39;<br>&#39;;
    echo &#39;function &#39;.$name.&#39; not exist&#39;;
  }
  /*public function __call($name,$arr){
    $num = count($arr);
    if($num<1){
      $name();
    }else{
      $name = $name.&#39;_one&#39;;
      $name($arr[0]);
    }
  }*/
}
$obj->func();
bee::staFunc();
/*$obj->func(1);
function func(){
  echo &#39;<br>&#39;;
  echo &#39;no.0&#39;;
}
function func_one($val){
  echo &#39;<br>&#39;;
  echo &#39;no.&#39;.$val;
}*/

   

注意:以上方法都屬於魔術方法,都帶有參數

希望本文所述對大家PHP程式設計有所幫助。 🎜
陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn