ホームページ > バックエンド開発 > PHPチュートリアル > Php5.0 命令 ------オブジェクト指向のために生まれた PHP5_PHP チュートリアル

Php5.0 命令 ------オブジェクト指向のために生まれた PHP5_PHP チュートリアル

WBOY
リリース: 2016-07-13 17:24:19
オリジナル
775 人が閲覧しました

Php5.0 の説明-----オブジェクト指向のために生まれた PHP5 オブジェクト指向のために生まれた PHP5 ------------------------ -- ----------------- 【概要】 現在開発中のPHP5のオブジェクト指向機能が大幅に強化されました。次世代の PHP はどのような言語になるのでしょうか?現在公開されているPHP5のベータ版について詳しく解説していきます。 (1) Zend 2.0 の誕生 現在の PHP4 で使用されている基本的な文法は、Zend エンジンと呼ばれるスクリプト コンパイル エンジンです。これが、PHP3 の改良として生まれた言語である PHP4 の機能が優れている理由の 1 つです。 PHP4 は当初の目的に基づいて PHP3 に比べてパフォーマンスが大幅に向上しており、ネットワーク プログラミングの世界で大きなシェアを占めていると誰もが常に信じてきました。 Zend エンジンを開発した Zend 社は、PHP3 の主な開発者である Zeev Suraski 氏と Andi Gutmans 氏が PHP4 の開発中に設立した会社を統合したものです。 Zend の名前は、Zeev と Andi の名前を組み合わせたものです。 Zend のビジネス モデルは、zend エンジンの PHP コアを継続的にオープンソースで提供すると同時に、周辺製品の開発と販売のメリットを増大させることです。オープンソース ソフトウェアに基づくビジネスは、世界中の苦境に立たされている企業の中でも比較的良い典型例であると考えられています。 ■PHP4の限界 PHP4の成功により、このアプリケーションの適用範囲は徐々に広がっています。エンタープライズレベルの目的で PHP を使用するという話があります。そのため、大規模なWebサイトを構築する場合、コードの再利用性が非常に悪いという問題があります。具体的には、PHP4 のオブジェクト指向のパフォーマンスが非常に低いため、Java などのテクノロジーの使用に慣れている技術者から多くの不満が寄せられています。 PHP4 のオブジェクト指向のパフォーマンスを段階的に向上させ、基本的な文法を大幅に変更することで、開発者は PHP の記述方法を更新するという開発目標を達成しました。 ■Zend 2.0 の開発が開始 その後、Zend PHP センターの開発者は、2001 年 7 月に次世代の PHP 言語エンジンとして Zend 2.0 エンジンのアイデアを発表しました。 [Zend Engine バージョン 2.0: 機能の概要と設計] (http://www.zend.com/engine2/ZendEngine-2.0.pdf) をターゲットにしながら、オブジェクト指向のパフォーマンスが大幅に強化されました。 現在の PHP4 Zend エンジンの拡張は、かつての PHP3 とまったく同じです。これは、新しい言語エンジンのメジャー バージョン番号を増やし、手法の目標を明確にし、開発チームから賞賛を受けることを意味します。 Ze2 の開発は、以前の Zend エンジンと同様、オープン ソース モードで実行されます。 CVS では最新のソースコードが完全に公開されており、オープンな開発者向けなので開発に関する議論が非常に活発です。 この度、Ze2 は PHP の次期バージョンである PHP5 で採用されることが決定しました。最終的なリリース時期はまだ決定されていませんが、2003 年 4 月 1 日に Zend Company がリリースしたニュースレターによれば、現時点でベータ リリースになるはずです。 (2) PHP5 の新機能 次に、PHP5 の性能強化を順に見ていきます。 1 つ目は、最も重要なオブジェクト指向のパフォーマンスです。クラスのエンティティ特性が大幅に変更されています。ここで話しているのは、クラスの新しい機能についてのみです。・オブジェクトの参照遷移はデフォルト(デフォルト) ・プロパティへのアクセス制限の導入 ・メソッドへのアクセス制限の導入 ・抽象クラスと抽象メソッド ・インターフェース ・最終宣言 ・名前空間 ・クラス内定数 ・クラス変数 ・統合ビルダー ・分析コンストラクタ(ディストラクタ) ・その他の付帯機能 上記の内容は、2003年4月22日にCVSに登録されたバージョン情報に基づいています。正式リリースまでに変更される可能性もあります。 ■オブジェクトのデフォルト参照遷移 PHP4では、変数$var1がクラスのエンティティオブジェクトの場合、$var2 = $var1の場合、$var2には$var1のコピーが代入されます。明らかに、$var2 が $var1 と同じオブジェクトを指すようにするには、$var2 =& $var1 として記述し、参照として & を追加する必要があります。 PHP5ではオブジェクト置換が自動参照遷移になります。つまり、$var2=$var1 は両方とも同じオブジェクトを指します。 php4のようなコピーを取り込みたい場合は__clone()をインポートする方法を使います。 $var2 = $var1->__clone(); ここで、clone の前には 2 つの連続した "_" が付いています (これはクラスの実体の特性にすぎません) ■PHP4 クラスでは、属性および属性とともに、属性へのアクセス制限が導入されています。メソッド内部では、クラスの内外のどこにでも制限なく自由にアクセスできます。したがって、ユーザーは属性に対する不注意な変更に対する保護がありません。 PHP5 では、C++ や Java と同様に、プライベート、プロテクト、パブリックの 3 つのレベルのアクセス制限が導入され、クラス設計者がプロパティとメソッドの使用を制限できるようになります。さまざまなアクセス制限の意味は次のとおりです。・パブリック:クラス内外どこでも自由に参照・変更可能 ・プライベート:このクラスのメソッドのみ参照・変更可能 ・プロテクト:このクラスのメソッドのみ参照・変更可能。このクラスを継承する別のクラスを参照して変更します。また、継承したクラスにアクセス指定を記述することができます。 PHP4 の「var」は、これまでと同様に public と同じ意味を持ちます。アクセス制限がどのように機能するかを示す例を次に示します。PHP コード:---------------------------------------------- ---------------------------------- class Hoge1 { private $var1 = A protected $var2 = B; 保護された $ var3 = C; 関数 setLower() { $this->var2 = b; } 関数 var1() { return $this->var1 ; } 関数 var2( ) { 戻り $this->var2; } 関数 var3() { 戻り $this->var3; -------- -------------------------------------- -------- ---- このクラスには、$var1、$var2、$var3 の 3 つの属性があります。ここで $var1 はプライベートとして宣言され、$var2 と $var3 は保護されています。 -------------------------------------------------- - $hoge=new Hoge1; echo'var1:'.$hoge->var1.” ---------------------------- -------------------------------------------------- -- 外部からアクセスが許可されていないプライベートプロパティを参照しようとすると、以下のエラーが表示されます。 Fatal error: Cannot access private property hoge1::$var1 in /path/to/script.php on XX 行 protected $ の場合 var2 についても同様です。 ただし、$hoge メソッドはプライベートまたは保護されていないため、次のコードは正常に動作し、内部のプライベート変数と保護された変数の値を返すことができます。 PHP コード:---------------------------------------------- - ---------------------------------- echo var1: . $hoge->var1() . "; // var1: エコー var2: . $hoge->var2() . " "; // var2: B echo var3: . $hoge->var3() . " "; // var3: C $hoge->setLower(); echo var1: . $hoge->var1() . " "; // var1: エコー var2: . $hoge->var2() . " "; // var2: b echo var3: . $hoge->var3() . " "; // var3: c ---------------------------------------- ---------------------------------------------------- 2つ目, protected属性の状態を確認するために、Hoge1のPHPコードを継承したクラスHoge2を作成してみます。 ------------------- ------------------------------- -------------- class Hoge2 extends Hoge1 { public $ var3 = 3; function d_var1() { return $this->var1 } function d_var2() { return $this->var2; ; } 関数 d_var3() { $this->var3 を返す } } ------ ---------------------------- - - - - - - - - - - - - - - - - - - - - - - - - クラスでHoge2 では、$var3 のみが public として宣言されており、属性が protected の場合、サブクラスの属性宣言によって制限が決まります。 Hoge1 では $var1 がプライベートなので、Hoge2 のサブクラスには $var1 という名前のプロパティが作成される可能性があります。 Hoge1::$ var1 と Hoge2::$var1 は明確に区別する必要があります。 ---------------------------------------------------- ------- $hoge = 新しい Hoge2; $hoge->var1 . "; // var1: // echo var2: . $hoge->var2 . " "; // エラー echo var3: . $hoge->var3 . " "; // var3: 3 echo var1: . $hoge->d_var1() . " "; // var1: echo var2: . $hoge->d_var2() . " "; // var2: B echo var3: . $hoge->d_var3() . " "; // var3: 3 ---------------------------------------- ---- ------------------------------------- $hoge->var1 は何も関係ありませんHoge1::var1 変数があるので表示されません var2 にはプロテクトされたアクセス制限があるため、メソッドを渡さずに $var2 を直接参照すると致命的エラーが発生します ■アクセスメソッド導入時の制限は上記と同様また、 private 、 protected 、 public にも分類されます。 · Public: どこからでも呼び出すことができます。 · Private: このクラスのメソッドからのみ呼び出すことができます。 · Protected: このクラスとサブクラスのメソッドからのみ呼び出すことができます。ここでの意味は Java と C++ と同じです。混同しないでください。 ■ 抽象クラスと抽象メソッドは、Java と同じ抽象クラスと抽象メソッドをサポートします。 抽象メソッドはメソッド名の呼び出しのみを提供します。クラスは、クラス自体を抽象的に宣言する必要があります。抽象クラスのオブジェクトを直接作成したい場合は、次の致命的なエラーが発生します。 エラーの実際の例は次のとおりです。 : PHP コード:- ------------------------------------------- ----- ----------------------------- 抽象クラス MyAbstract { 抽象パブリック関数 test() パブリック関数 test2; () { エコー "MyAbstract: :test2() が呼び出されました。 "; } } class MyImplement extends MyAbstract { public function test() { echo "MyImplement::test() が呼び出されます。 "; } } $obj = new MyImplement; $obj->test(); ?> ---------------------------- ---------------------------------------------------- ---- ■インターフェース(インターフェース)はJavaと同じインターフェースをサポートしており、記述された外部呼び出し形式に合わせてインターフェースが設計されています。対照的に、インターフェイスを実装するクラスは、インターフェイスのメソッドに対応するエンティティを保持する必要があります。さらに、クラスは複数のインターフェイスを実装できるため、多重継承が可能です。 PHP コード:---------------------------------------------- - ---------------

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/532145.html技術記事 Php5.0 の説明-----オブジェクト指向のために生まれた PHP5 オブジェクト指向のために生まれた PHP5 ------------------------ -- ----------------- 【要約】現在開発中のPHP5のオブジェクト指向機能は...
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート