ホームページ バックエンド開発 PHPチュートリアル セクション 15 -- Zend Engine_PHP チュートリアルの開発

セクション 15 -- Zend Engine_PHP チュートリアルの開発

Jul 21, 2016 pm 04:01 PM
開発する エンジン

/*
+---------------------------------------------- -- ----------------------------------+
| = この記事は Haohappy<> ; = 章のクラスとオブジェクトのメモ
| = 不要なトラブルを避けるため、転載はご遠慮ください
| PHP 愛好家は一緒に進歩しましょう
| = PHP5 Research Center: http://blog.csdn.net/haohappy2004
+---------------------- -------------------------------------------------- -- ---+
*/
セクション 15 -- Zend エンジンの開発
この章の最後のセクションでは、Zeev が Zend エンジンによってもたらされたオブジェクト モデルについて説明し、以前のバージョンのモデルとの関係について特に言及しています。 PHP の違いは何ですか? 1997 年の夏に PHP3 を開発したとき、PHP をオブジェクト指向にする計画はありませんでした。しかし、PHP3 は純粋に手続き型の言語でした。 1997 年 8 月 27 日、PHP に新しい機能を追加するには最小限の議論しか必要としませんでした。当時は PHP を研究する人が少なすぎたため、1997 年 8 月から PHP が開始されました。これはオブジェクト指向プログラミング言語への最初のステップです
実際、この設計には関連するアイデアがほとんどないため、このバージョンで使用されるオブジェクトのサポートは十分ではありません。配列 $foo["bar"] を使用する代わりに、より見栄えの良い $foo->bar を使用できます。オブジェクト指向アプローチの主な利点は、メンバー関数またはメソッドを通じて機能を保存できることです。 6.18 は典型的なコード ブロックを示していますが、例 6.19 のアプローチと大きな違いはありません。 ;?php
クラスの例
{
var $value = "何らかの値";
function PrintValue()
print $this->value; }

} $obj = new Example( ; function PrintValue ($arr) ) print $arr["value"]; function CreateExample()
$arr["PrintValue"] = "PrintValue"; }
$ Arr = Createexample ();
// PHP の間接参照を使用する
$ Arr [" Printvalue "] ($ arr); ただし、これら 2 つのオプションはそうではないことを考慮します。 PHP3 ではそれとは異なり、「構文のホワイトウォッシュ」としてのみオブジェクト モデルを使用して配列にアクセスできます。
PHP を使用したい オブジェクト指向開発を行うようになった人、特にデザイン パターンを使用したい人は、すぐにそのことに気づきました。幸いなことに、当時 (PHP3 時代) はオブジェクト指向開発に PHP を使用したいと考えていた人は多くありませんでした。これが、新しいバージョンでは、PHP でさまざまな識別子を使用できるようにする参照の概念を導入しました。これは、同じ変数に複数の名前を使用できることを意味します。例 6.20 のように名前を付けます。



コードをコピーします。コードは次のとおりです:
$a = 5;
//$b は $a と同じメモリの場所を指し、$a はメモリ内の同じアドレスを指します
$b = &$a; //we ' $b を変更しています。$a が $b を変更することを指しているので、指しているアドレスも変わります
//同じ場所 - それも変わります $a が指すアドレスも変わります
$b = 7
//prints 7 出力 7
print $a;
?>
相互に参照するオブジェクトのネットワークを構築することは、すべてのオブジェクト指向設計パターンの基礎であるため、参照によってより強力なオブジェクトを作成できるようになり、この改善は非常に重要です。 PHP は、他の種類のデータと同じアプローチでオブジェクトを処理します。PHP4 プログラマーなら誰でも言うように、アプリケーションは WTMA (Way Too Many Ampersands) 症候群に悩まされることになります。実際のアプリケーションを構築するときは苦痛です。例 6.21 を見ると理解できると思います。
1 クラス MyFoo {
2 関数 MyFoo()
3 {
4 $this->me = &$this;  
5 $this->value = 5;  
6 }
7
8 関数 setValue($val)
9 {
10 $this->value = $val;  
11 }
12
13 関数getValue()
14 {
15 return $this->value;  
16 }
17
18 関数getValueFromMe()
19 {
20 return $this->me->value;  
21 }
22 }
23
24 function CreateObject($class_type)
25 {
26 switch ($class_type) {
27 case "foo":
28 $obj = new MyFoo();  
29 休憩;  
30 case "バー":
31 $obj = new MyBar();  
32 休憩;  
33 }
34 $obj を返す;  
35 }
36
37 $global_obj = CreateObject ("foo");  
38 $global_obj->setValue(7);  
39
40 「値は 」 を印刷します。 $global_obj->getValue() 。 「ん」;  
41 print 「値は 」 。 $global_obj->getValueFromMe() 。 「ん」;  

まず、MyFoo クラスで $this->me を参照し、
他の 3 つのメンバー関数を使用します。1 つは this-> 値を返します。 this->value の値、もう 1 つは this->value->me の値を返しますが、 --$this と MyFoo:: は同じものではありませんか? getValueFromMe() も同じですか?
まず、MyFoo 型のオブジェクトを返す CreateObject("foo") を呼び出します。次に、MyFoo::setValue(7) と MyFoo を呼び出します。 ::getValueFromMe() は、戻り値 7 を取得することを期待します。
もちろん、すべてのケースで 7 を取得した場合、上記の例はこの本の中で最も意味のない例ではないことはご想像いただけると思います。 7 が 2 つもありません。
しかし、どのような結果が得られるのでしょうか。さらに重要なのは、なぜでしょうか。
得られる結果は 7 と 5 です。その理由については、3 つが良いです
まず、その理由を見てください。コンストラクター内では、this と this->me の間の参照が確立されますが、コンストラクターが終了すると、これは同じものになります。 PHP はオブジェクト (new MyFoo の結果、28 行目) を再作成し、それを $obj に割り当てます。他のデータ型と同様に、オブジェクトは特殊化されていないため、X を Y に割り当てることは、Y が Still ポイントのコピーであることを意味します。元のオブジェクト - これで、obj->me は同じものではなくなりました - 1 つを変更しても、もう 1 つは変更されません
上記が最初の理由と同様の理由です。奇跡的に、オブジェクトのインスタンス化の問題 (28 行目) は克服されます。CreateObject によって返された値を global_object に代入すると、依然として同じ問題に遭遇します。global_object は戻り値のコピーになり、再び global_object とglobal_object->me は同じではなくなります。これが 2 番目の理由です
しかし、実際にはそこまではできません。CreateObject が $obj を返したら、これが参照を破棄します (行 34)。 3 番目の理由: では、これを修正するにはどうすればよいでしょうか? 1 つは、例 6.22 (行 24、28、31、37) のように、あらゆる場所にアンパサンドを追加することです。上記のことはすべて忘れてください。PHP5 がこれらの問題をどのように考慮するかを知りたい場合は、
リスト 6.22 PHP 4 の WTMA 症候群 PHP4 WTMA 症候群

コードをコピーします。は次のとおりです:
1 クラス MyFoo {
2 関数 MyFoo()
3 {
4 $this->me = &$this;  
5 $this->value = 2;  
6 }
7
8 関数 setValue($val)
9 {
10 $this->value = $val;  
11 }
12
13 関数getValue()
14 {
15 return $this->value;  
16 }
17
18 関数getValueFromMe()
19 {
20 return $this->me->value;  
21 }
22 };  
23
24 関数 &CreateObject($class_type)
25 {
26 switch ($class_type) {
27 case "foo":
28 $obj =& new MyFoo();  
29 休憩;  
30 case "バー":
31 $obj =& new MyBar();  
32 休憩;  
33 }
34 $obj を返す;  
35 }
36
37 $global_obj =& CreateObject ("foo");  
38 $global_obj->setValue(7);  
39
40 「値は 」 を印刷します。 $global_obj->getValue() 。 「ん」;  
41 print 「値は 」 。 $global_obj->getValueFromMe() 。 「ん」;  

PHP5 は、オブジェクトを他のタイプのデータとは異なる方法で扱う最初の PHP バージョンです。ユーザーの観点から見ると、これは非常に明らかです。PHP5 では、他のタイプのデータ (整数、文字列など) は常に参照によって渡されます。 、配列) はすべて値によって渡されます。最も注目すべき点は、オブジェクトを参照によって渡すことを示すために & 記号を使用する必要がないことです。
オブジェクト指向プログラミングでは、オブジェクト ネットワークとオブジェクト間の複雑な関係がすべて使用されます。以前のバージョンの PHP では、参照を明示的に指定する必要がありました。そのため、オブジェクトは明示的にコピーが要求された場合にのみコピーされるようになり、以前よりも改善されました。
PHP5 より前では、すべての値は zval (Zend Value) と呼ばれる特別な構造体に格納されていました。これらの値は、数値や文字列などの単純な値、または配列や配列などの複雑な値に格納できます。オブジェクト。値が関数に渡されるとき、または関数から返されるとき、これらの値はコピーされ、メモリ内の別のアドレスに同じ内容の構造体が作成されます。PHP5 では、値は zval 構造体に格納されます。オブジェクトはオブジェクトストアと呼ばれる構造体に存在し、それぞれのオブジェクトは異なるIDを持ちます。Zvalではオブジェクトそのものは格納されませんが、オブジェクトを保持するzval構造体をコピーする際にオブジェクトのポインタが格納されます。たとえば、オブジェクトは関数にパラメータとして渡されます。もうデータはコピーされません。同じオブジェクト ポインタを保持し、この特定のオブジェクトが別の zval を通じてポイントしていることをオブジェクト ストアに通知します。この追加の間接指定により、透過的かつ効率的な方法で、PHP オブジェクトが常に参照によって渡されているかのように見えます。
PHP5 では、例 6.21 に戻りますが、コンストラクターで参照を保持するときに、すべてのアンパサンドを除いてすべて正常に動作します (4 行目)。


http://www.bkjia.com/PHPjc/316925.html

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/316925.html技術記事 /* +---------------------------------------------- --- ---------------------------------+ |=この記事は、CorePHP プログラミングの ClassesandObjects の章からの Haohappy のメモです。 |=|= メイン + 個人的な翻訳...
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

GIGABYTE マザーボードでキーボード ブート機能を設定する方法 (GIGABYTE マザーボードでキーボード ブート モードを有効にする) GIGABYTE マザーボードでキーボード ブート機能を設定する方法 (GIGABYTE マザーボードでキーボード ブート モードを有効にする) Dec 31, 2023 pm 05:15 PM

Gigabyte のマザーボードでキーボード起動を設定する方法 まず、キーボード起動をサポートする必要がある場合は、PS2 キーボードである必要があります。 !設定手順は次のとおりです: ステップ 1: 起動後に Del または F2 を押して BIOS に入り、BIOS の Advanced (Advanced) モードに移動します 通常のマザーボードは、デフォルトでマザーボードの EZ (Easy) モードに入ります。 F7 を押してアドバンスト モードに切り替える必要があります。ROG シリーズ マザーボードはデフォルトで BIOS に入ります。アドバンスト モード (説明には簡体字中国語を使用します) ステップ 2: - [アドバンスト] - [アドバンスト パワー マネージメント (APM)] を選択します。 ステップ 3 : オプション [PS2 キーボードによるウェイクアップ] を見つけます ステップ 4: このオプション デフォルトは無効です プルダウンすると、3 つの異なる設定オプションが表示されます: [スペースバー] を押してコンピューターの電源をオンにし、グループを押します

CS プレーヤーの第一選択: 推奨されるコンピューター構成 CS プレーヤーの第一選択: 推奨されるコンピューター構成 Jan 02, 2024 pm 04:26 PM

1. プロセッサ コンピュータ構成を選択する場合、プロセッサは最も重要なコンポーネントの 1 つです。 CS などのゲームをプレイする場合、プロセッサーのパフォーマンスはゲームのスムーズさや応答速度に直接影響します。 Intel Core i5 または i7 シリーズ プロセッサを選択することをお勧めします。これらのプロセッサは、強力なマルチコア処理能力と高周波数を備え、CS の高い要件に簡単に対応できるためです。 2. グラフィックス カード グラフィックス カードは、ゲームのパフォーマンスを左右する重要な要素の 1 つです。 CSなどのシューティングゲームでは、グラフィックカードの性能がゲーム画面の鮮明さや滑らかさに直結します。優れたグラフィックス処理能力と高いフレームレート出力を備え、より優れたゲーム体験を提供できる NVIDIA GeForce GTX シリーズまたは AMD Radeon RX シリーズ グラフィックス カードを選択することをお勧めします。

マザーボード上のデジタルオーディオ出力インターフェイス - SPDIF OUT マザーボード上のデジタルオーディオ出力インターフェイス - SPDIF OUT Jan 14, 2024 pm 04:42 PM

マザーボード上の SPDIFOUT 接続線の順序 最近、ワイヤの配線順序に関する問題に遭遇しました。ネットで調べたところ、1、2、4がアウト、+5V、グラウンドに相当するという情報もあれば、1、2、4がアウト、グラウンド、+5Vに相当するという情報もありました。最善の方法は、マザーボードのマニュアルを確認することです。マニュアルが見つからない場合は、マルチメーターを使用して測定できます。最初にアースを見つけてから、残りの配線の順序を決定します。マザーボードの VDG 配線の接続方法 マザーボードの VDG 配線を接続するときは、VGA ケーブルの一端をモニターの VGA インターフェイスに差し込み、もう一端をコンピューターのグラフィックス カードの VGA インターフェイスに差し込む必要があります。マザーボードの VGA ポートに差し込まないよう注意してください。接続すると、次のことが可能になります

Glodon Software のコンピューター構成の推奨事項、Glodon Software のコンピューター構成要件 Glodon Software のコンピューター構成の推奨事項、Glodon Software のコンピューター構成要件 Jan 01, 2024 pm 12:52 PM

Glodon Software は建築情報化分野に注力するソフトウェア会社で、その製品は建築の設計、建設、運用のあらゆる側面で広く使用されています。 Glodon ソフトウェアは機能が複雑でデータ量が大きいため、高度なコンピュータ構成が必要です。この記事では、読者が適切なコンピューター構成プロセッサーを選択できるように、Glodon Software のコンピューター構成に関する推奨事項をさまざまな側面から詳しく説明します。Glodon Software は、アーキテクチャー設計、シミュレーション、その他の操作を実行するときに大量のデータの計算と処理を必要とします。プロセッサの方が高いです。 Intel i7 シリーズや AMD Ryzen シリーズなど、マルチコアの高周波数プロセッサを選択することをお勧めします。これらのプロセッサは強力なコンピューティング能力とマルチスレッド処理能力を備えており、Glodon ソフトウェアのニーズをより適切に満たすことができます。メモリ メモリがコンピューティングに影響を与えています

エンジンの状況の変化: 3 気筒エンジンが 6 気筒と 8 気筒の優位性に挑戦 エンジンの状況の変化: 3 気筒エンジンが 6 気筒と 8 気筒の優位性に挑戦 Oct 08, 2023 pm 10:57 PM

10月8日のニュースによると、米国の自動車市場は水面下で変化を遂げており、これまで親しまれてきた6気筒や8気筒エンジンが徐々にその優位性を失い、3気筒エンジンが台頭しつつあるという。 10月8日のニュースは、米国の自動車市場が水面下で変化を遂げていることを示した。かつて愛された6気筒や8気筒エンジンは徐々にその優位性を失い、3気筒エンジンが台頭し始めているが、アメリカ人の多くの心の中には大排気量モデルが大好きで「アメリカンビッグV8」というイメージがある。常にアメリカ車の代名詞であり続けています。しかし、最近海外メディアが発表したデータによると、米国の自動車市場の状況は大きく変化しており、水面下での争いは激化している。 2019 年以前は、米国が

バックパックを背負ってチベットに旅行に行くのですが、 ①バッグの容量は何リットルくらいが適していますか?どのような構成がベストだと思いますか教えてください。 私は170歳で、初めての体力があります。 バックパックを背負ってチベットに旅行に行くのですが、 ①バッグの容量は何リットルくらいが適していますか?どのような構成がベストだと思いますか教えてください。 私は170歳で、初めての体力があります。 Jan 07, 2024 am 10:06 AM

チベットにバックパッキングに行く予定です ①バッグは何リットルくらい持っていきますか?ベストな構成を教えてください 私は170歳で体力はありますが、初めてハイキングに行ったときは60リットルでしたリットル以上 ハイキングの量は60リットル未満 移動はすべて車でした リュックサックは必要ありません、スーツケースが便利です どうしても何かを持ち歩きたい場合は25〜40リットルチベット旅行の必需品:サングラス、日よけ帽子、日焼け止め、スキンクリーム、リップクリーム、長袖上着、セーター;特別な旅行やアリ、北チベット、四川チベット線への旅行の場合は、これが必要です。持参推奨品:寝袋(防寒)、シーツ(汚れ防止)、ダウンジャケット、旅行靴または登山靴、スリッパ、歯ブラシ、歯磨き粉、タオル、巻き紙、紙パンツ、消毒用ワイプ、懐中電灯、防水マッチ、ナイフ、ロープ。フロント バッグにコンピューターを入れて持ち運べますか? フロント バッグにコンピューターを入れて持ち運べますか? バックパックによっては、フロント バッグに入れて持ち運べますか?

NVIDIA AI ゲームエンジンの実際のテスト: NPC とのリアルタイムチャット、中国語が流暢 NVIDIA AI ゲームエンジンの実際のテスト: NPC とのリアルタイムチャット、中国語が流暢 Mar 04, 2024 am 09:40 AM

『サイバーパンク2077』で黄学者が作った知性あるNPCはすでに中国語を話せる? Qubit を実際に体験して、NPC が中国語と英語で流暢に会話し、自然な表情と動き、口の形を一致させているのを目の当たりにする...目の前にスクリーンがなかったら、本当にその場にいるような気分になるでしょう。今年の CES 展示会で、Nvidia はインテリジェント エンジン Avatar Cloud Engine (ACE) を使用してゲームの NPC を「生きた」ものにし、大きな衝撃を与えました。 △CESに展示されるインテリジェントなNPCにはACEが採用されており、事前にスクリプトを用意することなく、ゲーム内のキャラクターが生き生きとした表情や体の動きを見せながら、プレイヤーとリアルな音声会話を行うことができます。デビュー当時はUbisoft、Tencent、NetEase、MiHoYoなどが存在しました。

グラフィックス カード ドライバーの最適なバージョンは何ですか? (どのグラフィックス カード ドライバーのバージョンが最適ですか) グラフィックス カード ドライバーの最適なバージョンは何ですか? (どのグラフィックス カード ドライバーのバージョンが最適ですか) Jan 10, 2024 pm 11:13 PM

グラフィックス カード ドライバーのどのバージョンを使用するのが最適ですか? 1. 絶対的な最適なバージョンはありません。お使いのコンピューターに適したバージョンを選択することが最も重要です。2. グラフィックス カード ドライバーのバージョンの適用性と安定性は、次のことに関連しているためです。コンピューターのハードウェア環境とシステム構成; 3. 公式 Web サイトでコンピューターとグラフィックス カードの詳細情報を確認し、その情報に基づいて適切なドライバーのバージョンを選択したり、他のユーザーのレビューを参照したりできます。予期せぬ事態を避けるために、ドライバーをインストールする前にシステムをバックアップすることをお勧めします。グラフィックス カード ドライバー バージョン 472.19 シリーズは、優れた選択肢です。現在、ドライバーの互換性はバージョン 472 が最も優れています。ドライバーのバージョン 472 をインストールすると、グラフィックス カードのパフォーマンスを最大化することもできます。 NVIDIA グラフィックス カード ドライバー Win7 インストール バージョン (番号 2、472.19) は、顕著な品質を備えた製品です。

See all articles