オブジェクト指向
初期のコンピュータ・プログラミングプログラマがプログラムの信頼性に重点を高め、わかりやすさ、スケーラビリティ、ハードウェア技術の発展に伴い、より多くの人々の開発プログラミングに重点を無視してハードウェアの制限により、プログラムは、効率性の追求です、拡張性、保守性、それはプログラミング言語の開発を刺激し
プロセス指向
- プログラマは、良いプログラムコードのフロー・チャート、補助プログラムを設計します。利点:どのような機能には欠点が機能し何を書くことができます:混乱のデータ管理を、主に表面に機能して、プロパティとメソッドを、オブジェクト指向の優れた再利用性と拡張性を包装するため
オブジェクト指向
- すべてオブジェクトで、トランザクションが各オブジェクトに分解の問題を提起するだろう、オブジェクトは、ジョブを完了するの目的を確立することが、より心の人々の習慣に沿って、問題を解決するには、トランザクションの振る舞いを記述するためではない、高いコードの再利用、良いスケーラビリティ
コアオブジェクト指向およびプロセス指向の割り当て業務を区別する方法。
クラスとオブジェクト
オブジェクトは、ビジネスニーズを達成するために互いに相互作用の中で、対象のシステム構成のオブジェクト指向のプロパティとメソッドです。
プロパティ
- クラスで定義された変数は、メンバプロパティは、データが静的特性をオブジェクト記述するために使用されます。そのような人の名前、性別、最初の文字を小文字として
方法
- クラスメソッドで定義された機能の動作を操作するオブジェクトの動特性を説明するために使用される部材、でなければならない、メソッド名は、ケース非感受性、複製することができず、最初の文字を小文字であります
オブジェクトのライフサイクル
- 作成したプログラムやプログラマの終わりには、オブジェクトの破壊後にクリアすると、ライフサイクルが始まると、PHPは自動的にオブジェクトを破壊します
抽象クラスは、コレクション(同じプロパティとメソッドを持つグループ)が同じセマンティック定義オブジェクトを持っている、という概念で、特定のクラスの使用は、可能であるだけでインスタンス化。クラス、車が対象であることを、例えば、自動車の設計図面を車を取ります。クラスの設計重点を作成します。
クラス名の書き込み仕様
- クラス名は大文字
- ファイル内のクラス定義
$この
オブジェクトを使用する$this
アクセスプロパティまたはメソッドへのポインタ。
class Code
{
protected $len = 5;
public function make()
{
return $this->len . $this->show();
}
public function show()
{
return ' : is show';
}
}
echo (new Code)->make();
継承
使用してextends
PHPで親クラスの継承の属性とメソッドを継承することができ、単一のです。
class Notify
{
public function message()
{
return 'notify message';
}
}
class User extends Notify
{ }
echo (new User)->message();
親クラスを呼び出します
サブクラスが使用することができparent
、キーワードコール親クラスのメソッドを
...
public function message()
{
return parent::message();
}
...
メソッドのオーバーライド
親クラスが使用されていない場合を除き、サブクラスは、親クラスをオーバーライドすることができますfinal
修正。
class Notify
{
public function message()
{
return 'notify message';
}
}
class User extends Notify
{
public function message()
{
return 'user notify';
}
}
echo (new User)->message();
書き換えを禁止します
この方法の最終宣言を使用すると、サブクラスで親クラスのメソッドをオーバーライド禁止されます。
public final function message()
{
return 'notify message';
}
パッケージ
公共の公衆
- 外部またはサブクラスは、クラス内でアクセスすることが可能で、それは最もオープンなアクセス許可であります
プライベートプライベート
- クラスで定義されたプロパティとメソッドは、クラス内でアクセスすることができ、アクセスできない外部クラスもしくはサブクラスであります
保護された保護
- プロパティとメソッドは、クラスで定義された、またはクラス内のサブクラスは、クラス、アクセスできない外にアクセスすることができます
モジュール設計
- 強い凝集(可能な限りクラス内の機能の完了)、弱(オープン外部コールするための方法としてほとんどとして)結合されています。例:会社は、会社の内部プログラマーへのアクセスプロジェクト、特定の作品を販売しているデザイナー、共同サーバー管理者
トレイト
使用trait
メカニズムは、多重継承の使用を偽装することができます。
class Alipay
{
use Pay;
}
class WePay
{
use Pay;
}
trait Pay
{
public function sn()
{
return 'ABCDEF';
}
}
echo (new WePay)->sn();
同じ名前の現在のクラスのプロパティとメソッドは、形質に存在する場合、属性が存在し、クラスのメソッドを使用して。
...
class WePay
{
use Pay;
public function sn()
{
return __METHOD__;
}
}
trait Pay
{
public function sn()
{
return 'ABCDEF';
}
}
...
その他の特性
複数使用することができるtrait
コンマ接続と
...
use Pay,Site;
...
解決の競合
class WePay
{
use Pay, Email {
Pay::notify insteadof Email;
Email::notify as EmailNotify;
}
trait Pay
{
public function notify()
{
return __METHOD__;
}
}
trait Email
{
public function notify()
{
return __METHOD__;
}
}
echo (new WePay)->notify();
Pay::notify insteadof Email
表示Pay::notify
方法の代替Email::notify
方法。
Email::notify as EmailNotify` 将`Email:notify` 别名为 `EmailNotify
アクセス制御
これは、アクセス制御方法継承された形質として再定義することができます
class WePay
{
use Pay, Email {
Pay::notify insteadof Email;
Email::notify as protected EmailNotify;
...
}
複数のトレイト
複数を通じてtrait
使用組成物。
trait Notify
{
public function response()
{
return 'notify response';
}
}
trait Pay
{
use Notify;
}
class User
{
use Pay;
}
echo (new User)->response();
抽象メソッド
trait Notify
{
public function response()
{
return 'notify response' . $this->sn();
}
abstract protected function sn();
}
trait Pay
{
use Notify;
}
class User
{
use Pay;
protected function sn()
{
return 'SN999';
}
}
echo (new User)->response();
staticメソッド
でtrait
使用静的メソッド、抽象メソッド、静的プロパティ。
...
trait Pay
{
public function sn()
{
return 'ABCDEF';
}
public static function notify()
{
return __METHOD__;
}
}
class WePay
{
use Pay;
...
}
echo WePay::notify();
静的
静的:
- データオブジェクトは、クラスのみを提供する必要、すなわち、利用可能なクラスの内部および外部の利用できません。内蔵のオブジェクトは非常にリソース集約され、ときに比較的強いメソッドはパブリックプロパティであるときに、メソッドを呼び出すと、クラスのインスタンスを再生成する必要はありません。メソッド定義された変数は、メモリ常駐プログラムが最初にロードされる、すなわち、解放ルーチンを終了します。
静的変数:
- 静的メンバ変数と呼ばれる静的変数やクラス変数として宣言することで、それは、そのクラスのみ1のすべてのオブジェクトについて、最初の使用を生成し、パブリッククラス変数であるオブジェクトに属していない、クラスに属します。静的変数は、クラスオブジェクトに属するの一部ではない、あなたはそれは、クラスが作成されたときにメモリに格納されているグローバル変数のクラスである、どこかのクラスへのアクセスを渡すことができます。一つだけを格納するための複数のオブジェクト、静的データメンバの場合は、メモリを節約することができます。ただ、すべてのオブジェクトに対して同じ値がアップデートにアクセスすることを確実にするために、静的データメンバの値を更新。
静的メソッド:
- この方法では、クラスメソッドという静的または静的メソッドで宣言されたメソッドを実行するときに我々ができる唯一のアクセス静的変数にアクセス非静的メンバ、または静的メソッドではないことができるようにオブジェクト参照が、関数に渡されていません。そのような自己静的親などのクラスにし、その上でのみを使用しています。オブジェクトが発生使用せずに実行することができます
クラス定数
使用const
クラスの定数、一定の使用を定義するためのself::
呼び出しに。
class Model implements ArrayAccess, Iterator
{
use ArrayIterator, Relation, Validate, Auto, Filter;
//----------自动验证----------
//有字段时验证
const EXIST_VALIDATE = 1;
//值不为空时验证
const NOT_EMPTY_VALIDATE = 2;
...
}
この自己::親を$ ::
$この
- 一般的にこの方法で表示され、現在のオブジェクトへの参照で、プロパティはメンバーのクラスを取得し、またはクラスメソッドのメンバーが実行します
自己::
- 現在のクラスのメンバーの特性を得るために使用されるこのクラスを参照し、自己のメンバメソッドをスタンドまたは静的::ラン()
親::
- 親クラス、メソッドまたはプロパティの呼び出し親クラスへの参照。
マジックメソッド
コンストラクタとデストラクタ
__constructコンストラクタ()
- オブジェクトの作成時に自動的に実行され、戻り値は、いくつかの初期化クラスを実行するために使用されていない、そのような初期化などのオブジェクトのプロパティ、構成メソッド__construct()。
- パラメータは、親と子のクラスはコンストラクタを定義されている場合、属性を定義するためのコンストラクタに渡すことができ、コンストラクタが実行サブクラスです
デストラクタ__destruct():
- すべてのオブジェクトの実装を参照する場合に破壊されています。
__getと__set
()を取得__、アクセスできないまたは存在しないプロパティを読んだが、呼ば共感取得プロパティにアクセスできないかで存在していない。されて実行__set()メソッド
<?php
abstract class Query
{
abstract protected function record(array $data);
public function select()
{
return $this->record(['name' => '后盾人', 'age' => 33]);
}
}
class Model extends Query
{
protected $field = [
'name'
];
public function all(){
$this->select();
return $this->field;
}
protected function record(array $data)
{
$this->field = $data;
}
public function __get($name)
{
return $this->field[$name] ?? null;
}
public function __set($name, $value)
{
$this->field[$name] = $value;
}
}
$user = new Model;
$user->all();
echo $user->name;
$user->name = '向军大叔';
echo $user->name;ry
### __isset()と__unset()
属性を決定するための関数が存在するかISSET()関数を使用したときに自動的にトリガを空または()が空です。
__unsetが存在する場合、特性を決定するために、未設定()関数を使用する場合()メソッドが実行されます。
...
public function __unset($name)
{
if (!isset($this->field[$name]) || in_array($name, $this->deny)) {
throw new Exception('禁止操作');
}
}
public function __isset($name)
{
return isset($this->field[$name]);
}
...
抽象クラス抽象メソッド&
方法抽象クラスは抽象クラスであり、抽象メソッドは、メソッドがコンテンツに空である、音声コンテンツが継承のみ延び、抽象クラスは、従来の方法で定義することができるによって達成することができ、サブクラスではなく、抽象クラスのインスタンスを必要とします
不確かな親クラスメソッドの実装が、この方法にもサブクラスを持っています
- 実施例1:車両クラス:航空機、自動車などの各車両が継承されたメソッドをオーバーライドしなければならないように、車両の動作モードを制御するための抽象メソッドを定義します。メソッドは、親クラスで定義されている場合、各車両は(メソッドをオーバーライドする船に接近する書き換え航空機)を書き換える必要がありますので(例えば、床の上を歩くような)ツールは、あなたのクラスのメソッドのように不確実な任意の意味がありませんでした、我々は多型を達成するための抽象メソッドを必要とします。
実施例2:動物の定義は、各動物は、各動物が機能を達成するように、メソッド呼び出しを有するが、異なる表面ので、抽象クラスとして定義します。
-
親クラスは抽象クラスである場合には、サブクラスは抽象親クラスを書き換える必要があります
-
必ずしもそうではありません抽象クラス抽象メソッドを書くことが、クラスの抽象メソッドがある抽象クラスとして定義する必要があります
-
抽象クラスを使用すると、継承しなければなりません
-
抽象メソッドは、{}である本体を持つことができません
-
<?php abstract class AbstractClass { // 强制要求子类定义这些方法 abstract protected function getValue(); abstract protected function prefixValue($prefix); // 普通方法(非抽象方法) public function printOut() { print $this->getValue(); } }
インターフェース
インターフェースは、実装に継承クラスのメソッドおよび定数空、空のメソッドのメンバーを含むグループのメンバーのメソッド宣言の集合体です。この方法のメンバーが公開され、特性が一定です。
-
- 例えば:コンピュータのUSB又はPCIスロット、プラグワイヤーボード実例インタフェースを有します
問題の層は、全体の継承が予想外になる場合の継承は、レベルの階層です。インタフェースは唯一のクラスが実装インタフェースに影響を与え、インタフェースはクラス拡張の元の継承に基づいて破壊することができます。インターフェイスは多重継承を実現することができます。
- 例:コンピュータのUSBポートは、すべてのメーカーの規定は、携帯電話、デジタルカメラ、インターネットバンキングU盾として適切なインタフェース・メソッドを構築しなければなりません。充電しながらあなたは、携帯電話のコンテンツの後に携帯電話にインストール開くことができ、すべてのメーカーがUSBに、このようなUシールドとして、独自の方法を書いてみましょう、自動的に自分のオンラインバンキングのシールドドライブにインストールされます、ポップアップページ
抽象クラスと一般的なクラスのインターフェイスを実装することができ、キーワードの実装
抽象クラスとインタフェースの違い:
-
1つのインターフェースは、継承された抽象クラスの実装で達成することができる達成延び
2はデータメンバーが定数を定義できませんことを、抽象クラスを持つことができます
3インターフェースは、抽象クラスのコンストラクタを定義することができ、コンストラクタではありません
パブリック抽象クラスのアプローチは、保護されたプライベート、パブリックを変更するために使用することができます4つのインターフェイスのメソッド
5クラスは複数のインタフェースを実装することができますが、唯一の抽象クラスを継承することができます
6つのインタフェース・メソッドはメンバーを持つことができない、抽象クラスのメソッドのメンバーができます
interface DbInterface {
public function connectDb(); //获得连接 参数为表名
public function close(); //关闭数据库
public function exe($sql); //发送没有返回值的sql
public function query($sql); //有返回值的sql
}
class Db implements DbInterface
{
public function exe($sql){
}
public function query($sql{
}
}