ホームページ php教程 php手册 PHP5オブジェクトシステム

PHP5オブジェクトシステム

Jun 13, 2016 pm 12:46 PM
php5 物体 記事 シリーズ


※この記事は「PHP5のクラスとオブジェクト」シリーズの補足・修正であり、PHP5のオブジェクトシステムの全体的な仕組みを紹介していますが、詳しくは紹介していない機能もあります。 「PHP5 のクラスとオブジェクト」を読んだ後にこの記事を読むことを強くお勧めします。



PHP5 によって開始されるオブジェクト システムは、誰もが最も楽しみにしているものであると考えられています。 PHP5 は Java2 のオブジェクト モデルを利用しており、比較的強力なオブジェクト指向プログラミング サポートを提供します。PHP を使用した OO の実装は簡単かつ自然になります。



オブジェクトの受け渡し



PHP5 は Zend Engine II を使用しており、オブジェクトは他の一般的な変数とは異なり、独立した構造のオブジェクト ストアに格納されます。 Zval に格納されます (PHP4 では、オブジェクトは一般変数と同様に Zval に格納されます)。オブジェクトの内容 (値) ではなく、オブジェクトのポインターのみが Zval に格納されます。オブジェクトをコピーする場合、またはオブジェクトをパラメーターとして関数に渡す場合、データをコピーする必要はありません。同じオブジェクト ポインターを保持し、この特定のオブジェクトが別の zval を介してポイントしていることをオブジェクト ストアに通知するだけです。オブジェクト自体はオブジェクト ストアに配置されているため、オブジェクトに加えた変更は、そのオブジェクトへのポインタを保持するすべての zval 構造体に影響します。これは、ターゲット オブジェクトに対する変更がソース オブジェクトに影響するため、プログラムに明示されています。これにより、PHP オブジェクトは常に参照 (参照) によって渡されるように見えるため、PHP のオブジェクトはデフォルトで「参照」によって渡され、PHP4 のように & を使用して宣言する必要がなくなりました。



ガベージ コレクション メカニズム

一部の言語 (最も一般的には C) では、データ構造を作成するときに明示的にメモリ割り当てを要求する必要があります。メモリを割り当てたら、情報を変数に保存できます。同時に、マシンが他の変数用にメモリを解放し、メモリ不足を回避できるように、変数の使用が終了したらメモリを解放する必要もあります。

PHP は自動的にメモリを管理し、不要になったオブジェクトを消去できます。 PHP は、参照カウントと呼ばれる単純なガベージ コレクション メカニズムを使用します。各オブジェクトには参照カウンタが含まれており、オブジェクトに接続されている参照ごとにカウンタが 1 ずつ増加します。参照がリビング スペースを離れるか、NULL に設定されると、カウンターは 1 ずつ減らされます。オブジェクトの参照カウンタがゼロになると、PHP はそのオブジェクトを使用する必要がなくなったことを認識し、そのオブジェクトが占有しているメモリ領域を解放します。

例:

class Person{
}
function sendEmailTo(){
}

$haohappy = new Person( );
// 新しいオブジェクトを作成します: 参照カウント = 1
$haohappy2 = $haohappy;
// 参照によってコピーします: 参照カウント = 2
unset($haohappy) ;
// 参照の削除: 参照カウント = 1
sendEmailTo($haohappy2);
// オブジェクトを参照で渡す:
// 関数実行中:
// 参照カウント = 2
// 実行後:
// 参照カウント = 1

unset($haohappy2);
// 参照の削除: 参照カウント = 0 メモリ空間を自動的に解放します

?>



上記は PHP5 のメモリ管理の変更点ですが、あまり興味がないかもしれません。 PHP5 と PHP4 のオブジェクト モデルの具体的な違いを見てみましょう:



★ 新機能

★ 改善された機能



1) ★ プライベートおよび保護されたメンバー プライベートおよび保護されたクラスのメンバー (プロパティ、メソッド)

2) ★ 抽象クラスとメソッド 抽象クラスと抽象メソッド

3) ★ インターフェイス インターフェイス

4) ★ クラスタイプヒントのタイプ表示 =

5) ★ 最終的な最後のキーワード =

6) ★ オブジェクトの複製オブジェクトのコピー =

7) ★コンストラクターとデストラクター コンストラクターとデストラクター

8) ★ クラス定数 クラス定数 =

9) ★ 例外 例外処理

10) ★ 静的メンバー 静的クラス メンバー

11) ★__METHOD__ constant __METHOD__ constant =

12) ★ Reflection 反映機構



No. 10 を参照してください。この記事の最後にある「PHP5のクラスとオブジェクト」シリーズで詳しく紹介されているため、この記事では説明しません。 9 番目の例外処理と 12 番目の反映メカニズムは、比較的内容が濃いため、紙面の都合上、記事では紹介できません。近々発行される電子雑誌「PHP & More」の第 2 号にご注目ください。具体的に記事で紹介します。



次に、言語機能 4、5、6、8、11 を紹介します。



4) ★ Class Type Hints の型表示



ご存知のとおり、PHP は型付けが弱い言語です。変数を使用する前に定義する必要はなく、変数のデータ型を宣言する必要もありません。これはプログラミングに多くの利便性をもたらしますが、特に変数の型が変更された場合には、いくつかの隠れた危険ももたらします。 PHP5 では型命令が追加され、実行中にクラスメソッドのパラメータの型を自動的に決定できます。これは Java2 の RTTI に似ています。リフレクションと組み合わせることで、オブジェクトを非常に適切に制御できます。





interface Foo {
function a(Foo $foo);

interface Bar {
function b(Bar $bar);
}

class FooBar は Foo, Bar を実装します {
function a(Foo $foo) {
// ...
}

function b(Bar $bar) {
// ...
}
}

$a = new FooBar; = 新しい FooBar;

$a->a($b)


;
厳密に型指定された言語では、すべての変数の型がコンパイル時にチェックされますが、PHP では型ディレクティブを使用して実行時に型がチェックされます。クラス メソッド パラメーターの型が正しくない場合、「致命的なエラー: 引数 1 はインターフェイス Bar を実装する必要があります...」のようなエラー メッセージが報告されます。



次のコード:

function foo(ClassName $object) {
// ...
}
?>



は次と同等です:

function foo($object) {
if (!($object) instanceof ClassName )) {
die("引数 1 は ClassName のインスタンスである必要があります")
}
}
?>



<🎜; >
5) ★final ファイナルキーワード



final キーワードは PHP5 で新たに追加されたキーワードで、クラスやクラスメソッドの前に追加できます。 Final としてマークされたクラス メソッドは、サブクラスでオーバーライドできません。 「final」としてマークされたクラスは継承できず、そのクラス内のメソッドはデフォルトで「final」になります。

最終メソッド:

class Foo {
final function bar() {
// ...
}
}
?>



最終クラス:

final class Foo {
// クラス定義
}

//次の行は間違っています
// class Bork extends Foo {}
?>



6) ★ オブジェクトの複製 オブジェクトのコピー

メモリ管理セクションで前述したように、PHP5 ではデフォルトでオブジェクトが参照によって渡されます。 $object2=$object1 などのメソッドを使用してコピーされたオブジェクトは相互に関連しています。元のオブジェクトと同じ値を持つオブジェクトを本当にコピーする必要があり、ターゲット オブジェクトがソース オブジェクトに関連していないことを望む場合 (通常の変数のように値で渡されます)、 clone キーワードを使用する必要があります。コピー中にソース オブジェクトの一部を変更する場合は、クラスに __clone() 関数を定義して操作を追加できます。



//オブジェクトコピー
class MyCloneable {
static $id = 0;

function MyCloneable() {
$this->id = self::$id ;
}


/*
function __clone() {
$this->address = "新規ヨーク";
$this->id = self::$id ;
}
*/
}

$obj = new MyCloneable();

$obj->name = "Hello";
$obj->address = "テルアビブ";

print $obj->id

$obj_cloned = クローン $obj;

print $obj_cloned->id . "n";
print $obj_cloned-> >address . "n";
?>



上記のコードは同一のオブジェクトをコピーします。



その後、関数 __clone() のコメントを削除してプログラムを再実行してください。基本的には同じですが、いくつかのプロパティが変更されたオブジェクトがコピーされます。



8) ★ クラス定数 クラス定数

PHP5 では、const キーワードを使用してクラス定数を定義できます。



class Foo {
const constant = "定数";
}

echo "Foo::constant = " . Foo::constant . "n";













11) ★__METHOD__ 定数 __METHOD__ 定数

__METHOD__ は、クラスのメソッド名を表す、PHP5 の新しい「魔法の」定数です。
マジック定数は、値が変更できる PHP の事前定義定数です。PHP の他の既存のマジック定数には、__LINE__、__FILE__、__FUNCTION__、__CLASS__ などが含まれます。

class Foo {
function show() {
echo __METHOD__;
}
}

class Bar extends Foo {
}

Foo::show(); // Foo::show を出力します
Bar::show(); // __METHOD__ が
であるため、Foo::show を出力します// -time 評価トークン

function test() {
echo __METHOD__;

test(); // テスト
?> :ヴィフォト)

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、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 つの異なる設定オプションが表示されます: [スペースバー] を押してコンピューターの電源をオンにし、グループを押します

php5とphp8の違いは何ですか php5とphp8の違いは何ですか Sep 25, 2023 pm 01:34 PM

php5 と php8 の違いは、パフォーマンス、言語構造、型システム、エラー処理、非同期プログラミング、標準ライブラリ関数、セキュリティの点です。詳細な紹介: 1. パフォーマンスの向上. PHP5 と比較して、PHP8 はパフォーマンスが大幅に向上しています. PHP8 では、高頻度の実行コードをコンパイルおよび最適化できる JIT コンパイラーが導入されており、それによって実行速度が向上しています; 2. 言語構造の改善、 PHP8 では、いくつかの新しい言語構造と関数が導入されており、PHP8 では名前付きパラメータがサポートされており、開発者はパラメータの順序などの代わりにパラメータ名を渡すことができます。

今すぐ Toutiao の記事を公開してお金を稼ぐにはどうすればよいですか?今すぐ Toutiao で記事を公開して収入を増やす方法! 今すぐ Toutiao の記事を公開してお金を稼ぐにはどうすればよいですか?今すぐ Toutiao で記事を公開して収入を増やす方法! Mar 15, 2024 pm 04:13 PM

1. 今すぐ Toutiao の記事を公開してどうやってお金を稼ぐことができますか?今すぐ Toutiao で記事を公開して収入を増やす方法! 1. 基本的な権利と利益の有効化: オリジナルの記事は広告によって利益を得ることができますが、利益を得るにはビデオが横画面モードでオリジナルである必要があります。 2. ファン100人の権利を有効化:ファン数が100人以上に達すると、マイクロヘッドライン、オリジナルQ&amp;A作成、Q&amp;Aから利益を得ることができます。 3. オリジナル作品にこだわる: オリジナル作品には記事、小見出し、質問などが含まれ、300 ワード以上であることが求められます。違法に盗用された作品をオリジナル作品として出版した場合、クレジットポイントが減点され、利益も差し引かれますのでご注意ください。 4. 垂直性:専門分野の記事を書く場合、分野を超えて自由に記事を書くことができず、適切な推薦が得られず、専門性や洗練度が得られず、ファンもつきにくいそして読者たち。 5. 活動: 高活動、

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 シリーズ グラフィックス カードを選択することをお勧めします。

PHP の json_encode() 関数を使用して配列またはオブジェクトを JSON 文字列に変換する PHP の json_encode() 関数を使用して配列またはオブジェクトを JSON 文字列に変換する Nov 03, 2023 pm 03:30 PM

JSON (JavaScriptObjectNotation) は、Web アプリケーション間のデータ交換の一般的な形式となっている軽量のデータ交換形式です。 PHP の json_encode() 関数は、配列またはオブジェクトを JSON 文字列に変換できます。この記事では、PHPのjson_encode()関数の構文、パラメータ、戻り値、具体的な例などの使い方を紹介します。構文 json_encode() 関数の構文は次のとおりです。

マザーボード上のデジタルオーディオ出力インターフェイス - 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 ポートに差し込まないよう注意してください。接続すると、次のことが可能になります

Xiaomi 15シリーズの完全なコードネームが明らかに:Dada、Haotian、Xuanyuan Xiaomi 15シリーズの完全なコードネームが明らかに:Dada、Haotian、Xuanyuan Aug 22, 2024 pm 06:47 PM

Xiaomi Mi 15シリーズは10月に正式リリースされる予定で、その全シリーズのコードネームが海外メディアのMiCodeコードベースで公開されている。その中でもフラッグシップモデルであるXiaomi Mi 15 Ultraのコードネームは「Xuanyuan」(「玄源」の意味)です。この名前は中国神話に登場する高貴さを象徴する黄帝に由来しています。 Xiaomi 15のコードネームは「Dada」、Xiaomi 15Proのコード名は「Haotian」(「好天」の意味)です。 Xiaomi Mi 15S Proの内部コード名は「dijun」で、「山と海の古典」の創造神である淳皇帝を暗示しています。 Xiaomi 15Ultra シリーズのカバー

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 ソフトウェアのニーズをより適切に満たすことができます。メモリ メモリがコンピューティングに影響を与えています

See all articles