オブジェクト
/*************************************************** * ******
翻訳: midiguy
翻訳の間違いをご指摘ください
E-Mail: midiguy@263.net
QQ:5149927
***************** * ******************************************/
オブジェクト指向プログラミングは、電話や車などのオブジェクトについての人々の考え方から生まれました。多くのプログラマは、オブジェクト指向プログラミングについて議論するときに「パッケージ化」や「継承」などの言葉を好んで使いますが、これらはほとんどの人を混乱させます。オブジェクト指向の概念を自然物と結び付けて、その原理を理解することができます。交通機関を例に挙げてみましょう。
デザイン
車両を構築するには、デザインが必要です。この設計図では、車両のホイールの数、色などを定義できます。車両は特定の属性と動作によって定義されます。 PHP では、これらのプロパティと動作を変数とメソッド (関数) と呼びます。オブジェクトを記述する変数とメソッドのセットが「クラス」を構成します。
拡張されたデザイン
車、自転車、バイクなど、さまざまな種類の交通手段があるため。一般的な交通手段を使いながら、さまざまな交通手段に新たな機能を付加できる方法が必要です。つまり、「クローラー」はあらゆる交通手段で使用する必要があるため、新たな機能を追加する必要がありません。 -このメソッドを書きます。この機能を「継承」して完成させることができます。 「vehicle」クラスを継承するクラス「car」を作成すると、「vehicle」クラス内のすべてのメソッドが「car」クラスに継承されます。
抽象化
抽象化の目的は、複雑なオブジェクトのプロパティの一部にのみ焦点を当てることであり、問題を解決するには、洗練されたオブジェクトを構築する必要があります。車の何千もの属性を簡単に取得できますが、自動車ディーラーのディレクトリを保存するプログラムを設計する必要がある場合、必要なのは 10 程度の属性のサブセットだけです。このようにして、車はプログラミングに適した車オブジェクトに抽象化されます。
ラッピング
ラッピングは、ツールメカニズム内の一連のメソッドの内容を非表示にし、明確に定義された言い訳のみをユーザーに提供します。オブジェクト指向プログラミングでは、パッケージ化によりオブジェクトのデータ構造とメソッドが結合されます。 「パッケージング」を理解する最も簡単な方法は、電話を例に挙げることです。今日の消費者はさまざまな電話機を購入でき、これらの電話機の内部設計は異なる場合がありますが、これらの電話機はすべて、標準の共通インターフェイスを介して通信できます。これはパッケージ化の考え方です。
クラスは新しいデータ型を定義できます。 PHP自体には文字列変数や浮動小数点型変数などの変数型があります。ただし、クラスを通じて、船舶、ユーザー リファレンス マニュアル、データベースなどの独自のデータ タイプを設計できます。クラスは、このデータ型のプロパティと動作 (メンバー変数とメソッド) を定義します。次の例は、プロパティとメソッドを含むクラスを定義する方法を示しています。
私たちの車両の実際の例を見てみましょう
/*
** クラスの定義方法
*/
class Class_Name
{
[var 変数定義]
[Function メソッド定義 ]
}
?>
----------車両クラス---------------
クラス車両
{
/*
* * プロパティ
*/
var $property1;
var $property3;
/*
** メソッド
*/
function settires($type)
{
if ($type == "Firestone" )
{
$this->property1 = "フォード SUV である必要があります";
}
}
function color($col)
{
$this->property2 = $col
}
?>
定義されたクラスの使用方法
クラスを定義したら、そのインスタンスを作成できます。先ほどの例を使用するには、以下の「Vehicle」クラスのインスタンスを作成します。
$myCar = new vehicle();
?>
クラスで変数を使用することです
オブジェクトとそのオブジェクトが保持する値の種類。文字列変数は値を持つので理解しやすいです。
$myStr = "PHP は...うーん、忘れました"; $myCar->hasAirbag = false;
$myCar->color = "ツルニチニチソウ";
PHP では、オブジェクトのすべてのメンバー変数がデフォルトでパブリックです。オブジェクトのプロパティへのアクセスを強制する方法はありませんが、変数をプライベートにしたい場合は、強調した方法でアクセスすることができます。
$this ポインター
オブジェクトのメソッドを呼び出したい場合は、'$this' を使用して、このオブジェクトの指定されたインスタンスのメンバー変数を呼び出すことができます。最初は理解できないかもしれません。例を見てみましょう。まず、2 台の車があると想像してください。
$myCar = new vehicle();
$spousesCar = new vehicle();
これで、同じクラスの 2 つのオブジェクトができました。 「同じユーザー定義変数タイプの 2 つの複合変数ができました」という言葉を聞いたことがあるかもしれません。これらは、同じ OOP 概念について異なる方法で説明しているだけです。
各変数 $myCar と $spousesCar には、このクラスとは別のプロパティ セットがあります。
$myCar->property1;
//これら 2 つは異なります
$spousesCar->property1;
//property1 がクラス定義に 1 回しか現れない場合でも。新しいデータ型を形成することのみを目的として設計されていることを理解する必要があります。
ただし、このクラスには settires() 関数が 1 つだけあります。次のステートメントを使用する場合、誰がそれを呼び出したかはどのようにしてわかるのでしょうか?
$myCar->settires("Firestone");
はは、$これでうまくいきました。指定されたオブジェクトがクラス内の関数を呼び出すと、そのオブジェクトはパラメーターとして自動的に渡されます。 $this は便宜上使用されています。以下の例を見てください。理解できるはずです。
$myCar->settires("Firestone");
/*
** メソッド
*/
function settires($type)
{
if ($type == "Firestone")
{
$this ->property1 = "フォード SUV である必要があります";
}
}
//$this は $myCar 変数
$spousesCar->settires("Goodyear")
/*
** メソッド
; * /
function settires($type)
{
if ($type == "Firestone")
{
$this->property1 = "フォード SUV である必要があります"
}
}
// これは次のようになります。 $spousesCar.
コンストラクターを作成する
クラスのインスタンスが作成された後、呼び出し可能な「デフォルト」関数が必要な場合、開発者は何をすべきでしょうか?これは「コンストラクター」を使用する方法です
実際には、コンストラクターの名前をクラスの名前として単純に定義するだけでこれを実現できます。これで、このクラスのオブジェクトを作成するたびに、このコンストラクター メソッドが呼び出されます。
クラスの継承
クラスは別のクラスを継承できると前に述べましたが、システムでは多くの変数が同じ役割を果たしますが、一部の変数はわずかに異なる役割を果たします。役に立つ。継承は、別のクラスをテンプレートとして使用して、クラスがそれ自体を構築できる方法です。継承クラスは、継承クラスで定義されているメンバ変数とメソッドを継承します。拡張または継承されたクラスはサブクラスと呼ばれます。継承されるクラスをスーパークラスまたは親クラスと呼びます。これにより、既存のコードに影響を与えることなく、クラスが別の方法で機能できるようになります。次に、例を見てみましょう。
クラス飛行機{
var $fuelLevel;
function takeOff() {
...
}
function land() {
...
}
function preFlightCheck () {}
}
class sevenFortySeven extends Airplane {
function preFlightCheck() {
//747航空機離陸準備
}
}
class biplane extends Airplane {
function preFlightCheck() {
//Biplane Plane離陸準備
}
}
$planeArray[] = 新しい biplane();
$planeArray[] = 新しい sevenFortySeven(); );
for ($x = 0; $x
if ($currentPlane->preFlightCheck() ) {
$currentPlane->takeOff();
//飛行機の種類に関係なく、離陸しようとしていることを認識します
} else {
print "飛行機に問題があります。";
}
クラスの静的メソッド
クラスのオブジェクトを扱うとき、特別なクラスを記述する代わりに、このオブジェクトに役立つ関数をこのクラスに置くことができます。このような関数は静的メソッドと呼ばれます。優れた
クラスには、すべての便利な (ユーティリティ) 関数が含まれている必要があります。
class Money {
function addTax($amount,$percent){
return $amount + ($amount * $percent)
}
function ConvertCurrency ($amount, $from, $to) {
/ /データベースで $from から $to への換算レートを検索します
return $amount * $rate;
}
}
$total = Money::addTax($subtotal,6.5);
$yen = Money: :convertCurrency ($usd, "america", "japan");
ファクトリ メソッド
オブジェクトを作成するためにコードをいくつかのチャンクに分割すると便利な場合があります。多数のクラスを使用したり、クラスを使用してファクトリ メソッド (ファクトリ メソッド) を使用するオブジェクトを決定したりできます。
ファクトリー クラスは、コードを効果的に整理するのに役立ちます。通常、ファクトリ クラスには比較的大きな変換宣言が含まれており、適切なオブジェクトのインスタンスを返します。 Cスキャンを見てみましょう
楽器の例。基本的な Item クラスがありますが、さまざまな製品 (電子機器、衣料品など) に対して呼び出すことができるサブクラスも多数あります。
Class Item {
var $isTaxable;
function getNewItem($upc) {
// $upc の型を見つけて $ に格納しますtype
//変数内の $upc の属性を検索し、それを $attrib 変数に入れます。 ) {
$this->properties = $a;
}
function requireScale() {
return true;
}
class ハードライン extends 項目 {
function ハードライン ($a) {
$ this- >properties = $a;
function requireSclae() {
return false;
}
}
while ( $upc = $scanner->next_code() ) { //スキャナクラス
$z = item::getNewItem($upc);
if ($z->requiresScale() ) {
echo "サイズが必要です!"
$subtotal += $z->; ; プロパティ["価格"]