[HP]オブジェクト向け


1.クラス、属性およびアクション
1.1クラスの構造
最も簡単なクラスの定義は次のとおりです.
class classname {
}

クラスを実用化するには、いくつかのプロパティと操作を追加する必要があります.クラスでキーワードを使用して変数を宣言することで、public、private、protectedなどの変数の役割ドメインに関連する属性を作成できます.
class classname {
  public $attribute;
}

クラス定義で関数を宣言することで、次のようなクラスのアクションを作成できます.
class classname {
  public function operation() {
  }
}

1.2構造関数と解析関数
ほとんどのクラスには構造関数と構造関数があります.クラスを作成すると、コンストラクション関数が呼び出されます.通常、初期化タスクが実行されます.コンストラクション関数に対して、クラスを破棄する前にいくつかの操作を実行したり、機能を完了したりすることができます.コンストラクション関数名は__でなければなりません.construct()は、構造関数名が__である必要があります.destruct()の例:
class classname {
  function __construct() {
  }
  function __destruct() {
  }
}

1.3クラスのインスタンス化
クラスを宣言した後、インスタンスを作成するか、クラスをインスタンス化するオブジェクトを作成する必要があります.newを使用して、次のようなオブジェクトを作成できます.
class classname {
  function __construct() {
  }
}
$i = new classname();

1.4クラス属性の使用
1つのクラスでは、特定のポインタ$thisにアクセスできます.クラスで操作によって変数を設定またはアクセスする場合は、$this->attributeを使用して参照できます.たとえば、次のようにします.
class classname {
  public $attribute;
  function operation() {
    echo $this->attribute;
  }
}

クラスの外部でプロパティにアクセスできるかどうかは、アクセス修飾子によって決まります.publicのプロパティは、クラスの外部から直接アクセスできます.たとえば、次のようにします.
class classname {
  public $attribute;
}
$i = new classname();
$i->attribute = "Hello World";

を通じてget()と_set()関数は属性へのアクセスを実現します.クラスの属性に直接アクセスせずにアクセス関数を記述する場合は、次のようなコードですべてのアクセスを実行できます.
class classname {
  public $attribute;
  function __get($name) {
    return $this->name;
  }
  function __set($name, $value) {
    $this->name = $value;
  }
}

$i->attribute=1を使用すると、間接的に__が呼び出されます.set()関数,_get()関数の動作原理は似ている.1つのアクセスポートのみで、保存するデータをチェックし、保存されたデータが有意義なデータであることを確保することができます.
1.5アクセス制御
PHPは、プロパティとメソッド宣言の前に通常配置されるプロパティとメソッドの可視性を制御するアクセス修飾子を提供します.
1)デフォルトのオプションはpublicです.つまり、プロパティまたはメソッドにアクセス修飾子が指定されていない場合はpublicになります.共通のプロパティとメソッドは、クラスの内部と外部にアクセスできます.
2)privateアクセス修飾子は、タグ付けされた属性とメソッドがクラス内でのみアクセスできることを意味する.
3)protectedアクセス修飾子は、タグ付けされた属性またはメソッドがクラス内にのみアクセスできることを意味し、任意のサブクラスにも存在する.
1.6クラスアクションの呼び出し
呼び出しプロパティとほぼ同じです.たとえば、クラスのアクションを呼び出すには、次のようにします.
class classname {
  function operation() {
  }
}
$i = new classname();
$i->operation();

2.継承と再ロード
2.1継承の実装
クラスが別のクラスのサブクラスである場合、キーワードextendsを使用して継承関係を指定できます.たとえば、次のようにします.
class B extends A {
}

クラスBはクラスAに割り当てられるため、クラスAで宣言されたpublicまたはprotectedの操作および属性を使用することができる.Aのサブクラスとして、BはAと同様の機能とデータを有する.privateで指定した操作と属性は継承できません.
継承は一方向で、子は親またはスーパークラスからプロパティを継承できますが、親は子クラスからプロパティを継承できません.
2.2重荷重
サブクラスでは、同じ属性と操作を再宣言することも有効です.サブクラスにある属性にスーパークラスの属性とは異なるデフォルト値を付与するか、ある操作にスーパークラスの操作とは異なる機能を付与する必要があります.これをリロードと呼びます.たとえば、次のようになります.
class A {
  function operation() {
  }
}
class B extends A {
  function operation() {
  }
}

parentキーを使用すると、親アクションの最初のバージョンを呼び出すことができますが、PHPでは現在のクラスのプロパティ値が使用されます.
2.3相続禁止
PHPはfinalキーワードを提供し、1つの関数宣言の前にこのキーワードを使用すると、この関数は任意のサブクラスで再ロードできません.たとえば、次のようにします.
final class classname {
}

2.4実装インタフェース
多重継承機能が必要な場合は、インタフェースを介して実行できます.インタフェースのアイデアは、アクセスインタフェースを実装するクラスが実装しなければならない一連の関数を指定することです.たとえば、次のようにします.
interface interfacename {
  function operation();
}
class classname implements interfacename {
  function operation() {
  }
}

3.オブジェクト向けの高度な機能
3.1 per-class定数
PHPは、アクセスクラスを初期化する必要がない場合に使用できるper-class定数の考え方を提供します.たとえば、次のようにします.
class classname {
  const c = 1;
}
echo classname::c;

3.2静的アプローチの実装
PHPはstaticキーワードの使用を許可し,このキーワードはクラスを初期化していない場合に呼び出すことができる方法に適用され,per−class定数に等価であるという考え方である.静的メソッドでは、参照できるオブジェクトインスタンスがない可能性があるため、thisキーは使用できません.
3.3検査クラスのタイプ
instanceofキーワードを使用すると、オブジェクトのタイプを確認できます.オブジェクトが特定のクラスのインスタンスであるかどうか、クラスから継承されているかどうか、インタフェースが実装されているかどうかを確認できます.
3.4静的バインドの遅延
PHP5.3遅延静的バインディングが導入され、この特性により、1つの静的継承コンテキストで呼び出されたクラスへの参照が可能になり、親クラスはサブクラスの再ロードの静的メソッドを使用することができる.
3.5クローンオブジェクト
PHPはcloneキーを提供し、このキーは既存のオブジェクトをコピーすることができます.たとえば、次のようにします.
$c = clone $i;

cloneは、既存のオブジェクトと同じクラスのコピーを作成し、同じ属性値を有します.デフォルトの動作をクローンする必要がない場合は、ベースクラスに__を作成する必要があります.clone()メソッド.cloneキーを使用すると、_でメソッドが呼び出されます.clone()メソッドでは、必要な正確なレプリケーション動作を定義できます.
3.6抽象クラスの使用
PHPはまた抽象クラスを提供して、これらのクラスは実例化することができなくて、同様にクラスの方法も実現していないで、ただクラスの方法の声明を提供して、例えば:
abstract class A {
  abstract function operation($param);
}

3.7使用_call()
__call()メソッドは、メソッドのリロードを実現するために使用されます.2つのパラメータが必要です.1つ目は呼び出されたメソッド名を含み、2つ目はメソッドに渡されたパラメータ配列を含みます.たとえば、次のようにします.
public function __call($method, $p) {
  if ($method == 'test') {
    $this->display('test', $p[0], $p[1]);
  }
}

3.8使用_autoload()
__Autoload()はクラスメソッドではなく、任意のクラス宣言の外でこの関数を宣言できます.この関数が実装されると、まだ宣言されていないクラスをインスタンス化するときに自動的に呼び出されます.
function __autoload($name) {
  include_once $name.'php';
}

3.9クラスを文字列に変換
実定義で実現した場合_string()関数は、クラスを印刷しようとすると、この関数を呼び出すことができます.
本文は“青鋒ノート”のブログから出て、転載をお断りします!