ホームページ php教程 php手册 PHP 5/Zend Engine 2.0の改善

PHP 5/Zend Engine 2.0の改善

Jun 21, 2016 am 09:15 AM
class function gt print

ここ 2 年間、PHP を使ったプログラムを書いていなかったので、今日 PHP を使ってみたくなり、ネットで調べたら PHP5 について再び興味が湧いたので、この記事を翻訳してみました。
この記事は http://www.php.net/ からのものです。
新しいオブジェクト モデル
PHP のオブジェクト処理部分が完全に書き直され、パフォーマンスが向上し、機能が追加されました。以前のバージョンの PHP では、オブジェクトはプリミティブな単純型
(整数や文字列など) として扱われていましたが、このアプローチの欠点は、変数が割り当てられるかパラメーターとして渡されるときに、オブジェクトのコピーが取得されることです。新しいバージョンでは、
オブジェクトはオブジェクトの値ではなく、ハンドルを通じて参照されます (ハンドルはオブジェクトの識別子として認識されます)。
多くの PHP プログラマーは、古いオブジェクト モデルの「コピーの癖」に気づいていない可能性があるため、以前のほとんどの PHP プログラムは変更を加えずに
、または最小限の変更のみで実行できます。

プライベート メンバーと保護されたメンバー
PHP 5 では、ビジュアル クラス プロパティを定義できるプライベート メンバー変数と保護されたメンバー変数が導入されました。

保護されたメンバー変数はクラスのサブクラスでアクセスできますが、プライベート メンバー変数はそれが属するクラスでのみアクセスできます。
Hello; print "MyClass::printHello() " . $this->Bar; print "MyClass::printHello() " . $this->Foo; } }class MyClass2 extends MyClass { protected $Foo; function printHello() { MyClass::printHello(); /* print "MyClass2::printHello() " /* すべきではありません。 print out anything */ print "MyClass2::printHello() " . $this->Bar; /* print すべきではありません (宣言されていません)*/ print "MyClass2::printHello() " . ; /* 出力する必要があります */ }}$obj = new MyClass();print $obj->Hello; /* 何も出力しません。以下も同様です */print $obj->Bar;何も出力しません */print $obj->Foo; /* 何も出力しません */$obj->printHello(); /* 出力する必要があります */$obj = new MyClass2();print $obj - >Hello; /* 何も出力しません */print $obj->Bar; /* 何も出力しません */print $obj->Foo; /* 何も出力しません * / $obj->printHello();?>

プライベート メソッドと保護されたメソッド

PHP 5 (ZEND エンジン 2) では、プライベート メソッドと保護されたメソッドも導入されました。
例:
aPrivateMethod(); }}class Bar extends Foo { public function aPublicMethod() { echo "Bar::aPublicMethod() added.n"; $this->aProtectedMethod(); ;$o->aPublicMethod();?>
前のコードのユーザー定義クラスまたはメソッドは、「public」、「protected」、「private」などのキーワードを定義していませんが、変更せずに実行できます。

抽象クラスとメソッド
PHP 5 では、抽象クラスとメソッドも導入されています。抽象メソッドはメソッドの「シンボル」を宣言するだけで、実装は提供しません。抽象メソッドを含むクラスは「abstract」として宣言する必要があります。
例:
test();?>
抽象クラスはインスタンス化できません。
「abstract」キーワードは古いコードのユーザー定義クラスまたはメソッドで定義されていませんが、変更せずに実行できます。
インターフェース
ZEND Engine 2.0 にはインターフェースが導入されています。クラスはインターフェイスの任意のリストを実装できます。
例:

古いコードのユーザー定義クラスまたはメソッドであっても「interface」キーワードは定義されていませんが、変更しなくても正常に動作します。

クラス型ヒント
PHP 5 では、型を定義せずにクラスを保持しながら、オブジェクトのクラスをパラメーターを通じてメソッドに渡すために宣言するクラス型ヒントが導入されました。
例:
a($b);$a->b($b ) ;?>
これらのクラス型ヒントは、型定義を必要とする一部の言語のようにコンパイル時にはチェックされず、実行時にチェックされます。これは次のことを意味します:

は次と同等です:

この構文はオブジェクトまたはクラスにのみ使用され、組み込み型には使用されません。

最後のキーワード(最終)
PHP 5 では、サブクラスでオーバーライドできないメンバーまたはメソッドを定義するために「final」キーワードが導入されました。
例:
class Foo {final function bar() { // ... }}?>
以前に書いたユーザー定義クラスやメソッドには「final」キーワードが定義されていませんが、コードですが、変更せずに実行できます。
オブジェクトのクローン作成
PHP 4 オブジェクトがコピーされるとき、ユーザーはどのコピー コンストラクターを実行するかを決定できません。コピーするとき、PHP 4 はオブジェクトのプロパティ
に基づいて同じコピーを少しずつ作成します。
毎回正確なレプリカを構築することは、必ずしも私たちが望むものであるとは限りません。コピー構築の良い例は、ウィンドウのすべてのリソースを所有する GTK ウィンドウを表すオブジェクトがある場合です。コピーを作成するときに、元のウィンドウのすべてのプロパティを所有する新しいウィンドウが必要になる場合があります。ただし、新しいウィンドウのリソースを所有する必要があります。別の例としては、別のオブジェクトを参照する
オブジェクトがあり、親オブジェクトをコピーするときに、その参照先オブジェクトの新しいインスタンスを作成して、複製に別のコピーが存在するようにしたい場合があります。
オブジェクトのコピーは、オブジェクトの __clone() メソッドを呼び出すことで完了します:
$copy_of_object = $object->__clone();
?> 開発者が新しいオブジェクトの作成を要求したときを実行すると、ZEND エンジンは __clone() メソッドが定義されているかどうかをチェックします。
が定義されていない場合は、デフォルトの __clone() メソッドを呼び出して、オブジェクトのすべてのプロパティをコピーします。このメソッドが定義されている場合、コピーに必要なプロパティを設定する役割を果たします。使いやすさを考慮して、エンジンはソース オブジェクトからすべての属性をインポートする機能を提供します。これにより、最初に値を含むソース オブジェクトのコピーを取得し、その後、変更する必要がある属性を上書きするだけで済みます。
例:
class MyCloneable {
static $id = 0;

function MyCloneable() {
$this->id = self::$id++;
}
function __clone() {
$this->name = $that->name;
$this->address = "ニューヨーク"
$this->id = self::$id++;

$obj = new MyCloneable();

$obj->名前 = "テルアビブ";

$obj = $obj->__clone();
print $obj->id . "n";
?>

均一な構築メソッド
ZEND エンジンを使用すると、開発者はクラスの構築メソッドを定義できます。コンストラクター メソッドを持つクラスが作成されると、コンストラクター メソッドが最初に呼び出されます。コンストラクター メソッドは、クラスが正式に使用される前の初期化に適しています。
PHP4では、コンストラクターの名前はクラス名と同じです。派生クラスで親クラスを呼び出すのが一般的であるため、大規模なクラス継承内でクラスを移動する場合、
PHP4 でクラスを処理するのは少し面倒です。派生クラスを別の親クラスに移動する場合、親クラスのコンストラクター名は異なる必要があります。この場合、派生クラスでの親クラスのコンストラクターの呼び出しに関するステートメントを書き直す必要があります。
PHP5 では、__construct() を呼び出すことでコンストラクターを定義する標準的な方法が導入されています。
例:
class BaseClass {
function __construct() {
print "In BaseClass constructionorn";
}
}

class SubClass extends BaseClass {
function __construct() {
parent::__construct() ;
print "In SubClass constructionorn";
}
}

$obj = new BaseClass();

PHP5 クラスが __construct () を見つけられない場合メソッドの場合、コンストラクター メソッドは、クラス名
である古いメソッドを通じて見つかります。これは、互換性の問題を引き起こす可能性がある唯一のことは、__construct() というメソッド名が以前のコードで使用されていた場合であることを意味します。

破壊メソッド
破壊メソッドを定義すると非常に便利です。デストラクター メソッドは、デバッグ情報を記録し、データベース接続を閉じ、その他のクリーンアップ作業
を実行できます。 PHP 4 にはそのようなメカニズムはありませんが、PHP はリクエストの最後に実行する必要がある関数の登録をすでにサポートしています。
PHP5 では、Java などの他のオブジェクト指向言語と同様のデストラクター メソッドが導入されています。オブジェクトへの最後の参照がクリアされると、システムはオブジェクトがメモリから解放される前に __destruct() というデストラクターを呼び出します。 。
例:
class MyDestructableClass {
function __construct() {
print "コンストラクター内";
$this->name = "MyDestructableClass";
}
function __destruct() {
print " " . $this->name . "n";
}
}

$obj = new MyDestructableClass();
?>

コンストラクター メソッドと同様に、エンジンは親のデストラクター メソッドを呼び出しません。このメソッドを呼び出すには、サブクラスのデストラクター メソッドのparent::__destruct() ステートメントを通じてこのメソッドを呼び出す必要があります。

定数
PHP 5 では、クラスごとの定数の定義が導入されています。
class Foo {
const constant = "constant"
}

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

PHP5 では定数内の式はコンパイル時に評価されるため、その値を変更することはできません。急いで。
class Bar {
const a = 1<<0;
const c = a b
?> 「const」キーワードが定義されたクラスまたはメソッドで定義されていない場合は、変更せずに実行できます。

例外
PHP4 には例外処理がありません。PHP5 では、他の言語と同様の例外処理モデルが導入されています。
class MyExceptionFoo extends Exception {
function __construct($Exception) {
parent::__construct($Exception)
}

try {
throw new MyExceptionFoo("Hello")
} catch; (MyExceptionFoo $Exception) {
print $Exception->getMessage();
?>

'catch'、'throw'、'try' は、前のコードのキーワードですが、変更せずに実行できます


関数はオブジェクトの値を返す
PHP4 では、関数がオブジェクトの値を返し、返されたオブジェクトに対してメソッド呼び出しを行うことは不可能です。Zend Engine 2
(ZEND Engine 2) の登場により、次の呼び出しが行われるようになります。可能:
class Circle {
functiondraw() {
print "Circlen";
}

class Square {
print "Squaren"; function ShapeFactoryMethod($shape) {
switch ($shape) {
case "Circle":
return new Circle();
case "Square":
return new Square()
}
}

ShapeFactoryMethod("Circle" ")->draw ();
ShapeFactoryMethod("Square")->draw();
?>

静的クラスの静的メンバー変数を初期化できます
例:
class foo {
static $my_static = 5 ;
}



静的メソッド

print foo::$my_static;
PHP5 では、外部から呼び出すことができる静的メソッドを定義します。物体。
例:

class Foo {
public static function aStaticMethod() {
// ...
}
}

Foo::aStaticMethod()?> this 静的として定義されたメソッドでは無効です。


Instanceof

PHP5 では、オブジェクトが特定のオブジェクトのインスタンスであるか、特定のオブジェクトの派生であるか、または特定のインターフェイスを使用しているかを判断するために「instanceof」キーワードが導入されています。

例:

classbaseClass { }

$a = newbaseClass;

if ($ainstanceofbasicClass) {
echo "Hello World"
?>

静的関数変数
すべての静的変数がコンパイル時に処理されるようになり、開発者は参照によって静的変数を指定できるようになりました。この変更により効率は向上しますが、静的変数への間接参照は不可能になります。


関数内で参照によって渡されるパラメータにはデフォルト値を設定できます
例:

function my_function(&$var = null) {
if ($var === null) {
die( " $var には値が必要です");
}
}
?>



__autoload()



未定義のクラスを初期化するとき、__autoload() インターセプタ関数が自動的に調整されて使用されます。クラス名は、唯一のパラメーターとして __autoload() インターセプト関数に渡されます。
例:
function __autoload($className) {
include_once $className . ".php";

$object = new ClassName
?>



呼び出し
すべてのメソッド呼び出しとプロパティ アクセスは、共通の __call()、__get()、__set() メソッドを使用してオーバーロードできます。

例: __get() と __set()
class Setter {
public $n;
public $x = array("a" => 1, "b" => 2, " c " => 3);

function __get($nm) {
print "[$nm]n を取得しています";

if (isset($this->x[$nm])) {
$r = $this->x[$nm];
print "Returning: $rn";
return $r; else {
print "Nothing!n";
}
関数 __set($nm, $ val) {
print "[$nm] を $valn に設定します";

if (isset($this->x[$nm])) {
$this->x[$nm] = $val ;
print "OK!n";
} else {
print "Not OK!n";
}
}

$foo = new Setter();
$ foo ->a = 100;
$foo->z++;



; 例: __call() php
class Caller {
var $x = array(1, 2, 3);

function __call($m, $a) {
print "メソッド $m が呼び出されました:n"; return $this->x;
}
}

$foo = new Caller();
$a = $foo->test(1, "2", 3.4, true); ;
?>



このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、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)

Huawei GT3 ProとGT4の違いは何ですか? Huawei GT3 ProとGT4の違いは何ですか? Dec 29, 2023 pm 02:27 PM

多くのユーザーはスマートウォッチを選ぶときにファーウェイブランドを選択しますが、その中でもファーウェイ GT3pro と GT4 は非常に人気のある選択肢であり、多くのユーザーはファーウェイ GT3pro と GT4 の違いに興味を持っています。 Huawei GT3pro と GT4 の違いは何ですか? 1. 外観 GT4: 46mm と 41mm、材質はガラスミラー + ステンレススチールボディ + 高解像度ファイバーバックシェルです。 GT3pro: 46.6mm および 42.9mm、材質はサファイアガラス + チタンボディ/セラミックボディ + セラミックバックシェルです。 2. 健全な GT4: 最新の Huawei Truseen5.5+ アルゴリズムを使用すると、結果はより正確になります。 GT3pro: ECG 心電図と血管と安全性を追加

Python でクラスとメソッドを使用する方法 Python でクラスとメソッドを使用する方法 Apr 21, 2023 pm 02:28 PM

クラスとメソッドの概念とインスタンス クラス (Class): 同じプロパティとメソッドを持つオブジェクトのコレクションを記述するために使用されます。コレクション内のすべてのオブジェクトに共通のプロパティとメソッドを定義します。オブジェクトはクラスのインスタンスです。メソッド: クラスで定義された関数。クラス構築メソッド __init__(): クラスには init() という名前の特別なメソッド (構築メソッド) があり、クラスがインスタンス化されるときに自動的に呼び出されます。インスタンス変数: クラスの宣言において、属性を変数で表現したものをインスタンス変数と呼びます。インスタンス変数とは、self で修飾された変数です。インスタンス化: クラスのインスタンス、クラスの特定のオブジェクトを作成します。継承: つまり、派生クラス (派生クラス) は基本クラス (ベースクラス) を継承します。

機能とはどういう意味ですか? 機能とはどういう意味ですか? Aug 04, 2023 am 10:33 AM

ファンクションとは、関数を意味します。これは、特定の関数を備えた再利用可能なコード ブロックです。プログラムの基本コンポーネントの 1 つです。入力パラメータを受け取り、特定の操作を実行し、結果を返すことができます。その目的は、再利用可能なコード ブロックをカプセル化することです。コードの再利用性と保守性を向上させるコード。

修正: Windows 11 で Snipping ツールが機能しない 修正: Windows 11 で Snipping ツールが機能しない Aug 24, 2023 am 09:48 AM

Windows 11 で Snipping Tool が機能しない理由 問題の根本原因を理解すると、適切な解決策を見つけるのに役立ちます。 Snipping Tool が正しく動作しない主な理由は次のとおりです。 フォーカス アシスタントがオンになっている: これにより、Snipping Tool が開かなくなります。破損したアプリケーション: 起動時にスニッピング ツールがクラッシュする場合は、破損している可能性があります。古いグラフィック ドライバー: 互換性のないドライバーは、スニッピング ツールに干渉する可能性があります。他のアプリケーションからの干渉: 実行中の他のアプリケーションが Snipping Tool と競合する可能性があります。証明書の有効期限が切れています: アップグレード プロセス中のエラーにより、この問題が発生する可能性があります。これらの簡単な解決策は、ほとんどのユーザーに適しており、特別な技術知識は必要ありません。 1. Windows および Microsoft Store アプリを更新する

Pythonにおけるクラスとは何を意味するのでしょうか? Pythonにおけるクラスとは何を意味するのでしょうか? May 21, 2019 pm 05:10 PM

クラスとはPythonでクラスを定義するためのキーワードです クラスの定義方法:classの後ろにスペースを入れてからクラス名を追加します; クラス名のルール:最初の文字を大文字にします 複数の単語がある場合はキャメルケースを使用してください[class Dog()] などの名前付け。

jQueryを使用して要素のクラス名を置換する jQueryを使用して要素のクラス名を置換する Feb 24, 2024 pm 11:03 PM

jQuery は、Web 開発で広く使用されている古典的な JavaScript ライブラリで、イベントの処理、DOM 要素の操作、Web ページ上でのアニメーションの実行などの操作を簡素化します。 jQueryを使っていると要素のクラス名を置き換える場面がよくありますが、この記事ではその実践的な方法と具体的なコード例を紹介します。 1.removeClass() メソッドと addClass() メソッドを使用する jQuery には、削除用の RemoveClass() メソッドが用意されています。

iPhoneでApp Storeに接続できないエラーを修正する方法 iPhoneでApp Storeに接続できないエラーを修正する方法 Jul 29, 2023 am 08:22 AM

パート 1: 最初のトラブルシューティング手順 Apple のシステムステータスを確認する: 複雑な解決策を掘り下げる前に、基本から始めましょう。問題はデバイスにあるのではなく、Apple のサーバーがダウンしている可能性があります。 Apple のシステム ステータス ページにアクセスして、AppStore が適切に動作しているかどうかを確認してください。問題があれば、Apple が修正してくれるのを待つしかありません。インターネット接続を確認します。「AppStore に接続できません」問題は接続不良が原因である場合があるため、安定したインターネット接続があることを確認してください。 Wi-Fi とモバイル データを切り替えるか、ネットワーク設定をリセットしてみてください ([一般] > [リセット] > [ネットワーク設定のリセット] > [設定])。 iOS バージョンを更新します。

PHP クラスの使用法の詳細な説明: コードをより明確で読みやすくします。 PHP クラスの使用法の詳細な説明: コードをより明確で読みやすくします。 Mar 10, 2024 pm 12:03 PM

PHP コードを記述するとき、クラスを使用するのは非常に一般的な方法です。クラスを使用すると、関連する関数とデータを 1 つのユニットにカプセル化できるため、コードがより明確になり、読みやすく、保守しやすくなります。この記事では、PHPClass の使用法を詳しく紹介し、クラスを適用して実際のプロジェクトでコードを最適化する方法を読者がよりよく理解できるように、具体的なコード例を示します。 1. クラスの作成と使用 PHP では、キーワード class を使用してクラスを定義し、クラス内のプロパティとメソッドを定義できます。

See all articles