ホームページ  >  記事  >  バックエンド開発  >  PHP関連のナレッジポイントの例のまとめ

PHP関連のナレッジポイントの例のまとめ

高洛峰
高洛峰オリジナル
2016-12-21 13:54:571002ブラウズ

この記事の例は、PHP クラスの関連知識ポイントをまとめたものです。参考のために皆さんと共有してください。詳細は次のとおりです:

Finalクラスとfinalメソッド

親クラスのメソッドが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{}

② インターフェイスは1つのインターフェイスのみを継承できます

interface a extends b{}

③ メソッドは、抽象的な変更のないすべての抽象メソッドです。つまり、下位レベルのクラスは、インターフェイス メソッドを実装する (実装する) か、抽象メソッドとしても宣言されます

オーバーロード技術

1。存在しない属性を使用すると、クラス内の事前定義されたメソッドが呼び出され、データが処理されます。

属性が使用されないアプリケーション シナリオでは、次の処理が行われます

① 値: __get() を自動的に呼び出します。 class
② 代入:クラス__set()内で__get()を自動呼び出し
③ 存在するかどうか判定:クラス内で__isset()を自動呼び出し
④ 破壊:クラス内で__unset()を自動呼び出し

前提として、メソッドは事前定義されており、そうでない場合はエラーが報告されます

<?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));

実行結果は次のとおりです:

one not exists
1
boolean true

2. メソッドのオーバーロード: 存在しないメソッドが使用される場合、事前定義されたメソッドが使用されます。動作を処理するためにクラス内のメソッドが呼び出されます。

メソッドには使用されません。アプリケーションのシナリオでは、次の処理を実行します

① オブジェクト内のアクセスできないメソッドを呼び出す: __call()
② 静的モードでアクセスできないメソッドを呼び出す: __callStatic ()

<?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;
}*/

実行結果は次のとおりです:

function func not exist
function staFunc not exist

注: 上記のメソッドはすべてパラメータ付きのマジック メソッドです

この記事が PHP プログラミングの皆様のお役に立てれば幸いです。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。