ホームページ バックエンド開発 PHPチュートリアル PHP5/ZendEngine2_PHP チュートリアルの改善

PHP5/ZendEngine2_PHP チュートリアルの改善

Jul 21, 2016 pm 04:11 PM
php php5 対処する 物体 改善する モデル 一部 リライト


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

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

保護されたメンバー変数はクラスのサブクラスでアクセスできますが、プライベート メンバー変数はそれが属するクラスでのみアクセスできます。
private $Hello = "Hello, World!n";
protected $Bar = "Hello, Foo!n";
function printHello( ) {
print "MyClass::printHello() " . $this->Hello;
print "MyClass::printHello() " . this->Foo;
}
}
class MyClass2 extends MyClass {
protected $Foo;
MyClass::printHello() /* 出力する必要があります */
print "MyClass2::printHello(); " . $this->Hello; /* 何も出力しないでください */
print "MyClass2::printHello() " . $this->Bar; /* 出力しないでください (宣言されていません)*/
print "MyClass2::printHello() " . $this->Foo; /* 出力する必要があります */
}
}
$obj = new MyClass(); /* 出力しません以下のようなコンテンツ */
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 Engine 2)、プライベートメソッドとプロテクトメソッドも導入されました。
例:
private function aPrivateMethod() {
echo "Foo::aPrivateMethod() が呼び出されました。n";
}
protected function aProtectedMethod() {
echo "Foo::aProtectedMethod() が呼び出されました.n";
$this->aPrivateMethod();
}
}
class Bar extends Foo {
public function aPublicMethod() {
echo "Bar::aPublicMethod() called.n";
$this-> ;aProtectedMethod();
}
}
$o = new Bar;
$o->aPublicMethod();
ですが、前のユーザー定義のクラスまたはメソッドでは定義されていませんcode protected」または「private」キーワードを使用しても、変更せずに実行できます。

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

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

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

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

Final キーワード (final)
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 = " 。 "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()

var $x = array(1, 2, 3);

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

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






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

www.bkjia.com

本当

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

技術記事

新しいオブジェクト モデル PHP のオブジェクト処理部分が完全に書き直され、パフォーマンスが向上し、機能が追加されました。以前のバージョンの PHP では、オブジェクトはプリミティブな単純型 (int...

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

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

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

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

PHP:Web開発の重要な言語 PHP:Web開発の重要な言語 Apr 13, 2025 am 12:08 AM

PHPは、サーバー側で広く使用されているスクリプト言語で、特にWeb開発に適しています。 1.PHPは、HTMLを埋め込み、HTTP要求と応答を処理し、さまざまなデータベースをサポートできます。 2.PHPは、ダイナミックWebコンテンツ、プロセスフォームデータ、アクセスデータベースなどを生成するために使用され、強力なコミュニティサポートとオープンソースリソースを備えています。 3。PHPは解釈された言語であり、実行プロセスには語彙分析、文法分析、編集、実行が含まれます。 4.PHPは、ユーザー登録システムなどの高度なアプリケーションについてMySQLと組み合わせることができます。 5。PHPをデバッグするときは、error_reporting()やvar_dump()などの関数を使用できます。 6. PHPコードを最適化して、キャッシュメカニズムを使用し、データベースクエリを最適化し、組み込み関数を使用します。 7

PHPとPython:2つの一般的なプログラミング言語を比較します PHPとPython:2つの一般的なプログラミング言語を比較します Apr 14, 2025 am 12:13 AM

PHPとPythonにはそれぞれ独自の利点があり、プロジェクトの要件に従って選択します。 1.PHPは、特にWebサイトの迅速な開発とメンテナンスに適しています。 2。Pythonは、データサイエンス、機械学習、人工知能に適しており、簡潔な構文を備えており、初心者に適しています。

PHP対Python:違いを理解します PHP対Python:違いを理解します Apr 11, 2025 am 12:15 AM

PHP and Python each have their own advantages, and the choice should be based on project requirements. 1.PHPは、シンプルな構文と高い実行効率を備えたWeb開発に適しています。 2。Pythonは、簡潔な構文とリッチライブラリを備えたデータサイエンスと機械学習に適しています。

アクション中のPHP:実際の例とアプリケーション アクション中のPHP:実際の例とアプリケーション Apr 14, 2025 am 12:19 AM

PHPは、電子商取引、コンテンツ管理システム、API開発で広く使用されています。 1)eコマース:ショッピングカート機能と支払い処理に使用。 2)コンテンツ管理システム:動的コンテンツの生成とユーザー管理に使用されます。 3)API開発:RESTFUL API開発とAPIセキュリティに使用されます。パフォーマンスの最適化とベストプラクティスを通じて、PHPアプリケーションの効率と保守性が向上します。

PHPの永続的な関連性:それはまだ生きていますか? PHPの永続的な関連性:それはまだ生きていますか? Apr 14, 2025 am 12:12 AM

PHPは依然として動的であり、現代のプログラミングの分野で重要な位置を占めています。 1)PHPのシンプルさと強力なコミュニティサポートにより、Web開発で広く使用されています。 2)その柔軟性と安定性により、Webフォーム、データベース操作、ファイル処理の処理において顕著になります。 3)PHPは、初心者や経験豊富な開発者に適した、常に進化し、最適化しています。

PHPおよびPython:さまざまなパラダイムが説明されています PHPおよびPython:さまざまなパラダイムが説明されています Apr 18, 2025 am 12:26 AM

PHPは主に手順プログラミングですが、オブジェクト指向プログラミング(OOP)もサポートしています。 Pythonは、OOP、機能、手続き上のプログラミングなど、さまざまなパラダイムをサポートしています。 PHPはWeb開発に適しており、Pythonはデータ分析や機械学習などのさまざまなアプリケーションに適しています。

PHP対その他の言語:比較 PHP対その他の言語:比較 Apr 13, 2025 am 12:19 AM

PHPは、特に迅速な開発や動的なコンテンツの処理に適していますが、データサイエンスとエンタープライズレベルのアプリケーションには良くありません。 Pythonと比較して、PHPはWeb開発においてより多くの利点がありますが、データサイエンスの分野ではPythonほど良くありません。 Javaと比較して、PHPはエンタープライズレベルのアプリケーションでより悪化しますが、Web開発により柔軟性があります。 JavaScriptと比較して、PHPはバックエンド開発により簡潔ですが、フロントエンド開発のJavaScriptほど良くありません。

PHPおよびPython:コードの例と比較 PHPおよびPython:コードの例と比較 Apr 15, 2025 am 12:07 AM

PHPとPythonには独自の利点と短所があり、選択はプロジェクトのニーズと個人的な好みに依存します。 1.PHPは、大規模なWebアプリケーションの迅速な開発とメンテナンスに適しています。 2。Pythonは、データサイエンスと機械学習の分野を支配しています。

See all articles