翻訳: Deep Space
著者: Andi Gutmans、Stig Bakken、Derick Rethans
無断転載を禁じます。
はじめに [はじめに]
言語機能 [言語機能]
• 新しいオブジェクト指向モデル [新しいオブジェクト指向モデル]
• 新しいオブジェクト指向機能 [新しいオブジェクト指向機能]
• その他の新しい言語機能 [その他の新しい言語機能]
PHP の一般的な変更点 [PHP の変更概要]
• XML および Web サービス [XML および Web サーバー]
• 新しい MySQLi (改良された MySQL) 拡張機能 [新しい MySQLi (改良された MySQL) 拡張機能
]
• SQLite 拡張機能 [SQLite 拡張機能]
• Tidy extension [Tidy extension]
• Perl extension [Perl extension]
• Other New Things in PHP 5 [Other PHP5 new things]
Summary [まとめ]
将来に備える最善の方法は、それを発明することです. (ジョン・スカリー)
未来に備える最善の方法は、それを発明することです。 (John Sculley)
はじめに [はじめに]
PHP 5 のリリースが 2 つの以前のリリース (PHP 3 と PHP 4) と同じくらい成功するかどうかは、時間が経てばわかります。新機能と変更点は
取り除くことを目的としています。 PHP が抱えていた可能性のある弱点をすべて取り除き、PHP5 が 2 つの前任者 (PHP3 および PHP4) と同じくらい成功するかどうかは、
世界で最高の Web スクリプト言語として
リードを維持できるようにします。新しい言語機能と
の変更の目的は、PHP が既に抱えている可能性のある弱点を解消し、世界最高の Web スクリプト
言語としてのリーダーの地位を確認することです。
この本では、PHP 5 とその新機能について詳しく説明しています。ただし、PHP 4 に精通していて、PHP 5 の新機能を知りたいと思っている方には、
この章が最適です。この本には、PHP5 とその新機能の詳細な説明が含まれています。ただし、PHP4 の親しい友人として、PHP5 でどのような更新が行われたかを知りたいと考えている方のために、この章が用意されています。
この章の内容:
この章の内容:
新しい言語機能 [新しい言語機能]
PHP 拡張機能に関するニュース [PHP 拡張機能に関する新しいニュース]
その他の注目すべき変更点 [その他の注目すべき変更点]
言語機能 [言語の機能]
新しいオブジェクト指向モデル [新しいオブジェクト指向モデル]
PHP 3 の時代に Zeev Suraski がオブジェクト指向構文を追加したとき、
それは「コレクションにアクセスするための構文糖衣」として追加されました。
ed モデルには継承もサポートされており、クラス (およびオブジェクト) でメソッドとプロパティの両方を
集約することができましたが、それ以上のことはできませんでした。Zeev と Andi r が PHP 4 用のスクリプト エンジンを書き直したとき、それはまったく新しいエンジンでした。
はるかに高速で、はるかに安定しており、さらに多くの機能を備えています。しかし、PHP 3 で最初に導入されたオブジェクト指向モデルには、ほとんど触れられていません
Zeev Suraski が PHP3 のときにオブジェクト指向構文を追加したときに、「」として追加されました。コレクションにアクセスするための糖衣構文
」。オブジェクト指向モデルは継承もサポートしており、クラス (またはオブジェクト) が
メソッドとプロパティを集約できるようにしますが、それ以上の機能はありません。 Zeev と Andi が PHP4 用のスクリプト エンジンを書き直したとき、それはより高速で、より安定し、より多くの機能が満載されたまったく新しいエンジンでした。ただし、PHP3 で初めて導入されたオブジェクト指向モデルについてはほとんど取り上げられていません。
オブジェクト モデルには重大な制限がありましたが、
世界中で広く使用され、多くの場合、非常に大規模な PHP アプリケーションで
OOP パラダイムが弱点にもかかわらず、PHP 4 で主に使用されるようになりました。 PHP 5 リリース。オブジェクト モデルは、世界中での広範な使用 (多くの場合、非常に大規模な PHP アプリケーション) を大幅に制限していますが、オブジェクト指向プログラミング パラダイムと PHP4 のこの優れたアプリケーションの欠点により、PHP5 リリースの主な焦点となりました。
では、PHP 3 と 4 にはどのような制限があったのでしょうか? 最大の制限 (
ch がさらなる制限を引き起こした) は、オブジェクトのコピー セマンティクスがネイティブ型の場合と同じであるという事実でした。 (オブジェクトを指す) 変数を別の変数に割り当てると、そのオブジェクトのコピーが作成され、パフォーマンスに影響を与えるだけでなく、通常は次のような問題が発生します。 PHP 4 アプリケーションのあいまいな動作とバグ
は、多くの開発者が両方の変数が
同じオブジェクトを指していると考えていたためですが、そうではなく、同じオブジェクトの別のコピー
を指していたため、一方を変更しても
は変わりません。その他
では、PHP3 と PHP4 の制限は何ですか?最大の制限 (これがさらに大きな制限につながります) は、
オブジェクトのコピーが元のオブジェクトと同じであるため、これが実際に PHP 開発に影響を与えるという事実です。変数 (
を指す) を変更すると、オブジェクト) が別の変数に割り当てられると、オブジェクトのコピーが作成されます。 PHP4 アプリケーションでこれを行うと、実行に影響を与えるだけでなく、多くの場合、あいまいな動作やエラーが発生します。多くの開発者は、これら 2 つの変数が同じオブジェクトを指していると信じているからです (実際にはそうではありません)。これらはそれぞれこのオブジェクトの 2 つのコピーを指します
一方を変更しても他方は変更できません。
例 [例]:
class person {
var $name;
function getName() {
return $this->name;
}
function setName($name) {
$this->名前 = $name;
}
関数 person($name) {
$this->setName($name)
}
}
function changeName($person, $name) {
$person->setName ( $name);
$person = new Person("Andi");
print $person->getName();その理由は、オブジェクト $person を
関数に値渡しするため、$person
がコピーされ、changeName() が $person のコピーに対して動作するためです。
PHP4 では、このコードは「Andi」を出力します。その理由は、オブジェクト $person を関数
changeName() に値で渡し、$person のコピーが作成され、changeName() が $person の
コピーを実行するためです。
多くの開発者が Java
のような動作を期待しているため、この動作はあまり直感的ではありません。Java 変数は実際には
オブジェクトへのハンドル (またはポインタ) を保持するため、コピーされるときはハンドルのみが保持されます。オブジェクト全体が複製されます
この動作は直感的ではなく、多くの開発者は当初、Java と同じように動作すると考えていました。 Java では、
変数は実際にはオブジェクトへのハンドル (またはポインタ) を保持するため、
すべてがコピーされるのではなく、ハンドルとしてのみ機能します。PHP 4 には、これを認識していた 2 種類のユーザーがいました。問題
と、そうでない人は、通常、この問題
に気付かないでしょうし、彼らのコードは、問題
が存在するかどうかが実際には問題にならない方法で書かれていました。眠れぬ夜は、特定できなかった奇妙なバグを追跡しようとしました。前者のグループは、常にオブジェクトを参照で渡して代入することでこの問題に対処していました。これにより、エンジンがオブジェクトをコピーするのを防ぐことができますが、非常に困難になります。
コードには多数の「&」記号が含まれているため、
PHP4 のユーザーには 2 つの異なるタイプがあり、1 人はこの問題を知っており、1 人は知らないです。後者は通常、問題に気づきません。問題が存在するかどうかは、作成するコードにはほとんど関係ありません。実際、こうした人々の中には、特定できない不可解なバグを追って一晩を費やすこともよくあります。これまでのチームは通常、このオブジェクトへの参照を登録することでこの問題に対処していました。これにより、エンジンがオブジェクトのコピーを作成できなくなりますが、コード
に多数の「&」タグが含まれているため、少し面倒になります。
古いオブジェクト モデルは、上記の問題を引き起こしただけでなく、
既存のオブジェクト モデルにいくつかの追加機能を実装することを妨げ、この既存のオブジェクトにいくつかの追加機能を実装することを妨げる根本的な問題も引き起こしました。モデル。
PHP 5 では、ob
ject ハンドルで動作するようにオブジェクト モデルのインフラストラクチャが書き直されました。
オブジェクトを参照によって渡す必要も、ref
erence によってオブジェクトを割り当てる必要もありません。
PHP5 では、オブジェクト モデルの構造がオブジェクト ハンドルを使用して実行されるように書き直されました。 clone キーワードを使用して明示的にオブジェクトのクローンを作成しない限り、オブジェクトのコピーを作成することはできません。 PHP5 では、オブジェクト
への参照を渡したり、オブジェクトへの参照を登録したりする必要はありません。
注:
変数の内容 (オブジェクトまたは他の
型) を実際に変更したい場合、参照による受け渡しと参照による代入は引き続きサポートされます。オブジェクトまたはその他のタイプ)。
新しいオブジェクト指向機能 [新しいオブジェクト指向機能]
新しいオブジェクト指向機能は多すぎるため、このセクションでは詳しく説明できません
オブジェクト指向言語の章では、各機能について詳しく説明します
オブジェクト指向の機能は多すぎるため、この章では詳しく説明できません。オブジェクト指向言語の章で各機能について詳しく説明します。
以下は主な新機能のリストです:
以下は主な新機能のリストです:
1. メソッドとプロパティの public/private/protected アクセス修飾子
1. メソッドとプロパティの public/private/protected アクセス修飾子を追加
メソッドとプロパティへのアクセスを制御するための共通の OO アクセス修飾子の使用を許可します
の使用を許可します。メソッドとプロパティへのアクセスを制御するためのパブリック オブジェクト指向アクセス許可の変更。
class MyClass {
private $id = 18;
public function getId() {
return $this->id;
}
2. 統合コンストラクター名 __construct() 2. __construct()
コンストラクターをクラスの名前にする代わりに、 __construct() として宣言する必要があります。これにより、クラス階層内のクラスを簡単に移動できるようになります
宣言する必要があるコンストラクターの名前。 __construct() と同様に、クラス レベルでクラスを置き換えるよりも作成が簡単です。
class MyClass {
function __construct() {
print "内部コンストラクター";
}
3. __destructor() メソッドの定義によるオブジェクト デストラクターのサポート
3. __destructor() メソッドの定義によるオブジェクト デストラクターのサポート
オブジェクトが破棄されたときに実行されるデストラクター関数を定義できます。
オブジェクトが破棄されたときに実行されるデストラクター関数を定義できます。
class MyClass {
function __destruct() {
print "オブジェクトの破棄";
}
?>4. インターフェイス
4. 1 つは関係です。クラスは 1 つのクラスからのみ継承できますが、クラスに必要な数だけインターフェイスを実装できます。クラスは別のクラスからのみ継承できますが、より必要な
インターフェイスを実装できます。
インターフェイス Display {
function display();
}
class Circle は Display {
function display() {
print "表示円";
} 5. インスタンス操作
を実装します。 is-a 関係チェックのレベル サポート。PHP 4 の is_a() 関数は非推奨になりました。is-a 言語レベル チェックのサポートを提供するため、PHP4 の is_a() 関数は非推奨になりました。
if (Circle の $obj インスタンス) {
print '$obj is a Circle';
6. Final メソッド
6. Final キーワードを使用すると、継承クラスが次のようにメソッドをマークできます。
それらをオーバーロードします。
final キーワードを使用すると、継承クラスがメソッドをロードできないようにマークできます。
class MyClass {
final function getBaseClassName() {
return __CLASS__;
}
7. Final クラス
クラスを Final として宣言した後は、それを継承することはできません。 e はエラーになります:
継承できない最終クラスを宣言した後、次の例ではエラーが生成されます:
final class FinalClass {
}
class BogusClass extends FinalClass {
}
8 明示的なオブジェクトの複製
8.明示的なオブジェクトのクローン作成
オブジェクトのクローンを作成するには、 clone キーワードを使用する必要があります。クローン プロセス中に (元のオブジェクトから
プロパティがコピーされた後) 呼び出される __clone() メソッドを宣言できます。
オブジェクトをコピーするには、clone キーワードを使用する必要があります。
クラスがコピーされるとき(元のオブジェクトのプロパティがコピーされた後)に実行される__clone()メソッドを宣言できます。
class MyClass {
function __clone() {
print "オブジェクトが複製されています";
}
}
$obj = new MyClass()
9. クラス定数
9.クラス定義に定数値を含めることができるようになり、
クラスを使用して参照できるようになりました。
クラス定義に定数値を含めることができ、
クラスを使用して参照できるようになりました。
class MyClass {
const SUCCESS = "成功";
const FAILURE = "失敗";
10. 静的メンバー
クラス定義に静的メンバーを含めることができるようになりました。静的メンバーの一般的な使用法はシングルトン パターンです。クラス定義には静的メンバー (プロパティ) の定義が含まれており、クラスを通じてアクセスできます。通常、静的メンバーは別の
セクションで使用されます。
クラス Singleton {
static private $instance = NULL;
private function __construct() {
}
static public function getInstance() {
if (self::$instance == NULL) {
self::$インスタンス = new Singleton();
return self::$instance;
}
}
11. 静的メソッド
メソッドを非オブジェクトから呼び出すことができるようになりました
静的メソッドは特定のオブジェクトに依存しないため、$this 変数を定義しません。静的メソッドを定義できるようになり、オブジェクトのスコープから呼び出すことができるようになりました。静的メソッドは、他の特定のオブジェクトに対する制限として $this 変数を定義しません。
class MyClass {
static function helloWorld() {
print "Hello, world";
}
12. 抽象クラスクラス
クラスはインスタンス化されないように抽象として宣言できます
ただし、抽象クラスから継承することもできます。ただし、抽象クラスから継承することはできます。
abstract class MyBaseClass {
function display() {
print "呼び出されるデフォルトの表示ルーチン";
}
}
13. 抽象メソッド
13. メソッドは抽象として宣言されるため、その定義を延期できます。抽象メソッドを含むクラスは、ab
stract として宣言する必要があるため、継承されたクラスからの定義を継続できます。クラスに抽象メソッドが含まれる場合、それを抽象として宣言する必要があります。
abstract class MyBaseClass {
abstract function display();
14. クラス型のヒント
関数が間違ったパラメータで呼び出された場合、関数宣言にはクラス型のヒントが含まれる場合があります。クラス型ではエラーが発生します。
関数宣言には引数としてクエーサーを含めることができます。これは、関数が間違ったクラスで呼び出された場合に
エラーを出力します。
function ExpectsMyClass(MyClass $obj) {
}
15. PHP 4 では、m
メソッドから返されるオブジェクトを直接逆参照できませんでした。まずオブジェクトをダミー変数に割り当ててから
それを参照解除する必要があります。PHP4 では、メソッドで返されたオブジェクトから直接解決することはできません。オブジェクトを
中間変数に登録してから解析する必要があります。
PHP 4:
$dummy = $obj->method();
PHP 5:
$obj->method()->method2();
16. イテレーター
PHP 5 では、PHP クラスと PHP 拡張クラスの両方で Iterat
or インターフェイスを実装できるようになり、foreach( を使用してクラスの
インスタンスを反復できるようになります。 ) 言語構造。
PHP5 では、PHP クラスと PHP 拡張クラスが反復インターフェイスを実装できます。このインターフェイスを実装すると、foreach() 言語構造を使用してこのクラスを繰り返しインスタンス化できます。
$obj = new MyIteratorImplementation();
foreach ($obj as $value) {
print "$value";
より完全な例については、「高度な OOP と設計パターン
ns」を参照してください。
より完全な例については、「高度なオブジェクト指向と設計モデル」の章を参照してください。
17. __autoload()
17. __autoload()
オブジェクト指向アプリケーションを作成する多くの開発者は、クラスごとに 1 つの PHP ソース ファイルを作成します。最も面倒なことの 1 つは、必要なインクルードの長い
g リストを作成する必要があることです。各スクリプトの先頭 (クラスごとに 1 つ)
。PHP 5 では、これは必要ありません。クラスを使用しようとしている場合に自動的に呼び出される __autoload() 関数を定義できます。この関数を呼び出すことで、スクリプト エンジンは、PHP がエラーで救済される前に、クラスをロードする最後のチャンスを与えられます。ロシア語の PHP ファイルのクラス ボーナスは、すべてのスクリプトの先頭に長いファイル インクルード リストを記述する必要があることです (1 つのクラスが 1 回インクルード
されます)。 PHP5 では、これを行う必要があります。まだ定義されていないクラスを自動的に呼び出す __autoload() 関数を定義できます。この関数を呼び出すと、スクリプト エンジンは PHP がエラーをスローするまでこのクラスの読み取りを試行し続けます。
function __autoload($class_name) {
include_once($class_name . "php");
$obj = new MyClass1()
$obj2 = new MyClass2();言語機能]
1. 例外処理
PHP 5 では、よく知られている try/throw/catch 構造化例外処理パラダイムの機能が追加されています。
Exception クラスから継承するオブジェクトのみをスローできます。
PHP5 には、よく知られた try/throw/catch 例外処理システムが追加されています。
problem クラスから継承するオブジェクトのみをスローできます。
class SQLException extends Exception {
public $problem;
function __construct($problem) {
$this->problem = $problem;
try {
...
throw new SQLException("データベースに接続できませんでした");
...
} catch (SQLException $e) {
print "問題 $obj->問題で SQLException をキャッチしました" ;
} catch (Exception $e) {
print "認識できない例外をキャッチしました";
現在、下位互換性の目的で、ほとんどの内部関数は例外をスローしません
。また、既存の
g set_error_handler() と同様に、スクリプトが終了する前にハンドルされない
d 例外をキャッチするために set_Exception_handler() を使用することもできます。例外をスローしません。ただし、これらの機能を活用するために、独自のコードで使用できる新しい
拡張機能が開発されています。また、既存の set_error_handler() と同様に、set_Exception_handler() を使用して、スクリプトが終了する前に未処理の例外をキャッチできます。
2. 参照を伴う foreach
2. 参照を伴う foreach
PHP 4 では、配列を反復処理してその値を変更することができませんでした
foreach() ループを「&」でマークできるようにすることでこれをサポートします。 (
を参照) したがって、変更した値は、反復処理中の配列に影響を与えます。PHP4 では、配列を反復してその値を変更することはできません。 PHP5 では、「&」(参照)
タグの foreach() ループを使用してこれを行うことができ、反復処理中の配列に影響を与える変更する値を作成します。
foreach ($array as &$value) {
if ($value === "NULL") {
$value = NULL;
}
}
3. 参照パラメータのデフォルト値
3 . パス 参照パラメータへのデフォルト値の指定がサポートされるようになりました。PHP 4 では、デフォルト値を受け入れることができます。パラメーターに値として引用符で囲まれた値を与えることがサポートされるようになりました。
function my_func(&$arg = null) {
if ($arg === NULL) {
print '$arg is empty';
}
}
my_func();概要]
XML と Web サービス [XML と Web サーバー]
言語の変更に続いて、おそらく PHP 5 の XML の更新が最も重要であり、最も魅力的なのは、PHP 5 の XML 機能の強化
です。言語の変更により、PHP5 の XML の更新がおそらく最も重要でエキサイティングです。 PHP5 で強化された XM
L 機能は、同じ分野の他の Web テクノロジーと同じであり、それらの一部を超えています。
PHP 4 の基盤 [基本]
XML サポートは、さまざまな基礎となる XML ライブラリを使用して実装されました
SAX サポートは古い Expat ライブラリを使用して実装され、XSLT は Sablotron ライブラリを使用して実装されました (または、libxml2 を使用して実装されました)。 DOM 拡張子) と D
OM は、GNOME プロジェクト
t によって、より強力な libxml2 ライブラリを使用して実装されました。
XML は、基礎となる XML ライブラリを通じてサポートされ、SAX は、古い Expat ライブラリを通じてサポートされます。 (または libxml2 を使用した DOM 拡張機能を介して) がサポートされており、DOM はより強力な GHOME プロジェクトの libxml2 ライブラリを使用してサポートされています。
XML サポートに関しては、さまざまなライブラリを使用しても PHP 4 が優れたものにはなりませんでした
メンテナンスが不十分で、新しい XML 標準が常にサポートされているわけではなく、パフォーマンスも期待できるほど良くありませんでした。
さまざまな XML 拡張機能間の相互運用性は存在しませんでした。
このライブラリを使用しても、PHP4 が他の XML サポートより優れているわけではありません。保守性が悪く、新しい XML 標準が常にサポートされているわけではなく、パフォーマンスも理想的ではなく、これらの拡張機能間には互換性がありません。
PHP 5 では、すべての XML 拡張機能が、優れた libxml2 XML
ツールキット (http://www.xmlsoft.org/
) を使用するように書き直されました。これは、非常に機能が豊富で、高度に保守され、
効率的に XML を実装したものです。
XML テクノロジーの最先端を PHP にもたらす標準です。
PHP5 では、すべての XML 拡張機能が書き直され、非常に豊富な機能を備えた優れた libxml2 XML ツールキットを使用します。 XML 標準の高度に維持された効率的な実装により、PHP に XML の利点がもたらされます
上記のすべての拡張機能 (SAX、DOM、および XSLT) は、新しい追加拡張機能 SimpleXML と SOAP を含む libxml2 を使用するようになりました
上記のすべての拡張機能 ( SAX、DOM および
ml2。新しい拡張機能には互換性があるはずですが、いくつかの小さな
がある可能性があります。微妙な違いがありますが、それでも Expat ライブラリを使用したい開発者は、それに応じて PHP を構成してビルドすることができます (推奨されません)。ただし、新しい拡張機能間の互換性には微妙な違いがある可能性があります。開発者は引き続き Expat 拡張機能をサポートするように PHP を構成できます (これはお勧めしません)。
DOM
PHP 4 の DOM サポートも libxml2 ライブラリに基づいていましたが、
非常にバグが多く、メモリ リークがあり、多くの場合、API は W3C に準拠していませんでした。 PHP 5.
拡張機能の大部分が書き直されただけでなく、W3C の準拠にもなりました。たとえば、関数
名は W3C 標準で説明されている stacklyCaps を使用するようになり、
一般的な W3C ドキュメントを読み、学習した内容を実装することが容易になりました。さらに、DOM 拡張機能は、XML 検証用に 3 種類のスキーマ、DTD、XML スキーマ、RelaxNG をサポートするようになりました
DOM サポートは依然として PHP4 の libxml2 に基づいていますが、抜け穴がたくさんあります。 、メモリ リークがあり、API はさまざまな理由で W3C に準拠していません。 DOM 拡張機能は PHP5 用に完全に刷新され、ほぼ完全に書き直されただけでなく、W3C 推奨にもなりました。たとえば、関数名は W3C 標準経由で StudyCap
を使用して記述されるようになり、W3C ドキュメント全体を読みやすくなり、PHP で学んだ内容を実装することが容易になります。
これらの変更の結果、DOM を使用する PHP 4 コードは常に PHP 5 で実行できるわけではありません
ただし、ほとんどの場合、これらの変更の結果、関数名を新しい標準に合わせて調整することでうまくいきます
。 , PHP4 で DOM を使用するコードは、PHP5 でも常に使用できるとは限りません。ただし、
ほとんどの場合、関数名を新しい標準に合わせて調整することで解決できる可能性があります。
XSLT
PHP 4 では、XSL 変換をサポートする拡張機能が 2 つありました。最初の拡張機能は Sablotron 拡張機能を使用し、2 つ目は DOM 拡張機能の XSLT サポートを使用しました。PHP 5 では、新しい XSL 拡張機能が使用されました。 PHP 5 と同様に、XSL 変換は XSLT スタイルシートをパラメータとして受け取りませんが、DOM 拡張子に依存してロードされ、スタイルシートはキャッシュされます。
あらゆるドキュメントに適用でき、実行時間を節約できます
PHP4 には、XSL 変換をサポートする拡張機能が 2 つあります。 1 つ目は Sablotron 拡張機能を使用し、2 つ目は DOM 拡張機能の XSLT サポートを使用します。 PHP5 では、新しい XSL 拡張機能が libxml
2 拡張機能に基づいていることに言及しておきます。 PHP5 では、XSL 変換は XSLT スタイルをパラメータとして抽出せず、DOM 拡張機能に依存してそれを読み取るため、スタイルはメモリに保存され、実行時間を節約するために多くのドキュメントに適用されます。
SimpleXML
おそらく 1 ~ 2 年後に振り返ってみると、SimpleXML は、PHP 開発者が XML ファイルを扱う方法に革命をもたらしたことが明らかになるでしょう。 DOM や
さらに悪い SAX を使用すると、SimpleXML は XML ファイルをネイティブ PHP オブジェクトとして表し、
要素や属性に簡単にアクセスして
XML ファイルを反復処理できます。おそらく、過去 1 年を振り返ると、 2 つ目は、SimpleXML が PHP 開発者が
XML ファイルを扱う方法に革命をもたらしたことは明らかです。 SimpleXML はまさに「初心者のための XML」と言えます。 SimpleXML は、DOM やさらにひどい SAX を扱う代わりに、XML ファイルを PHP オブジェクトとして記述します。読み取り、書き込み、または反復を使用して、要素と属性に簡単にアクセスできます。
次の XML ファイルについて考えてみましょう:
$clients = simplexml_load_file('clients.xml');
foreach ($clients->client as $client) {
print "$client->名前は $client-> です;account_number ";
}
SimpleXML が実際にどれほど単純であるかは明らかです。
この例は、SimpleXML が実際にどれほど単純であるかを明確に示しています。
そして、この軽量拡張機能ではサポートされていない、SimpleXML オブジェクトに対して高度な操作を行う必要がある場合には、それを
に変換できます。dom_import_simplexml() を呼び出して DOM ツリーを作成し、それを DOM で操作し、simplexml_import_dom() を使用して SimpleXML に変換します。両方の拡張機能のおかげで、これら 2 つの間の切り替えが現実化されました。 SimpleXML オブジェクトを操作するには、この軽量拡張機能がサポートしていない高度な機能が必要です。
dom_import_simplexml() を呼び出して DOM ツリーに変換し、DOM で操作して、
simplexml_import_dom() を使用して SimpleXML に戻すことができます。両方の拡張機能が同じ基礎となる
XML ライブラリを使用しているため、それらの切り替えはすでに実装されています。
SOAP
PHP 4 では公式のネイティブ SOAP サポートが不足していました。最も一般的に使用されている SOAP
実装は PHP で完全に実装されていたため、他の利用可能な C 拡張機能と同じようには実行できませんでした。
安定性と広範な採用に達していないため、
メインの PHP 5 ディストリビューションには含まれていません。
PHP4 には正式な SOAP サポートがありません。 SOAP の一般的な使用は、PEAR を通じてサポートされています。ただし、
PHP を実装として使用することは、組み込みの C 拡張機能を使用する場合と同様に機能しません。他の利用可能な C 拡張機能は、安定性と幅広い用途を実現しません。したがって、PHP5 のメイン構成にはこれが含まれていません。 (この文には問題があるようです) PHP 5 の
SOAP サポートは C 拡張機能として完全に書き直され、
ベータ プロセスの非常に遅い段階でしか完成しなかったものの、
SOAP 標準のほとんどの
が完全に実装されているため、デフォルトのディストリビューションは、PHP5 の C 拡張機能として完全に書き直されましたが、完成したのは後期ベータ バージョン
でした。 SOAP 標準のほとんどを完全に実装しているため、デフォルトの構成に追加されています。
以下は、WSDL ファイルで定義された SomeFunction() を呼び出します。
$client = new SoapClient("some.wsdl");
$client->SomeFunction( $a, $b, $c); MySQLi (改良された MySQL) 拡張機能 [新しい MySQLi (改良された MySQL) 拡張機能]
PHP 5 の場合、MySQL AB (http://www.mysql.com/) が新しい MySQL 拡張機能
を作成しました。 MySQL 4.1 の新機能は
以降に追加されます。古い MySQL 拡張機能とは対照的に、新しい拡張機能では、機能とオブジェクト指向のインターフェイスの両方が提供されるため、この拡張機能でサポートされる新機能は次のとおりです。プリペアドステートメントと
変数バインディング、SSL と圧縮接続、トランザクション制御、
レプリケーションのサポートなど...
PHP5、MySQL AB (http://www.mysql.com/
新しい MySQL 拡張機能が書かれています)古い MySQL 拡張機能とは対照的に、新しい拡張機能では、好みに応じて選択できる関数とオブジェクト指向インターフェイスが提供されます。
事前宣言された変更可能なバインディング、SSL と接続圧縮、処理制御、レプリケーション サポート、および SQLite 拡張機能 [SQLite 拡張機能] のその他の多くの機能が含まれます。
SQLite のサポート (http://www.sqlite.org/)
で最初に導入されました。 PHP 4.
3.x シリーズ。SQL サーバー
を必要としない組み込み SQL ライブラリであり、
SQL サーバーのスケーラビリティを必要としないアプリケーションや、ISP で導入している場合に非常に適しています。
SQL サーバーへのアクセスは許可されません。その名前が示す内容に反して、SQLite は非常に豊富な機能を備えており、トランザクション、サブセレクト、ビュー、および大きな DB ファイルをサポートしています。これは、PHP 4 サーバーで非常に遅く導入され、オブジェクト指向インターフェイス
を提供し、イテレーターをサポートすることで PHP 5 を利用しているためです (http://www.sqlite.org/
サポートが最初に導入されました)。 PHP 4.3.x の場合。これは、SQL サーバーを含まない組み込み SQ
L ライブラリであり、スケーラビリティのために SQL を含まないアプリケーション、または SQL へのアクセスをサポートしない ISP を使用している場合に最適です。その名前とは対照的に、SQLite が豊富な機能であり、トランザクション、サブ選択、ビュー、および大きな DB ファイルをサポートしていることを暗示しています。これは、PHP4 シリーズの非常に後発で導入されたものであり、PHP5 の利点を活用し、オブジェクト指向インターフェイスを提供することで反復をサポートするため、ここで PHP5 の新機能として説明されています。
Tidy 拡張機能 [Tidy 拡張機能]
PHP 5 には、便利な Tidy (http://tidy.sf.net/
ライブラリ) のサポートが含まれています。これにより、PHP 開発者は HTML ドキュメントを解析、診断、クリーン、および修復できます。 Tidy 拡張機能は関数型インターフェースとオブジェクト指向インターフェースの両方をサポートしており、
その API は PHP 5 例外メカニズムを使用しています。
PHP5 には便利な Tidy (http://tidy.sf.net/)
ライブラリ サポートが含まれています。これにより、PHP 開発者による分析が可能になります。
、HTML ドキュメントを診断、クリーニング、修復します。 Tidy 拡張機能は関数インターフェイスとオブジェクト インターフェイスをサポートしており、その API は P
HP5 の例外メカニズムを使用します。
Perl 拡張機能 [Perl 拡張機能]
デフォルトの PHP 5 パッケージにはバンドルされていませんが、Perl 拡張機能を使用すると、
PHP 内から直接 Perl スクリプトを呼び出したり、Perl オブジェクトを使用したり、他の Perl 機能を使用したりすることができます。 PECL (PHP Extension
Community Library) リポジトリ内の http://pecl.php.net/package/perl
デフォルトの PHP5 プラグインの包括的なレビューはありませんが、Perl 拡張機能を使用すると、Perl スクリプトを呼び出すことができます。 PHP 内で、
Perl オブジェクトを操作し、他の Perl 機能を使用します。新しい拡張機能は、PECL (PHP Extensions Common Library) リポジトリにあります。
http://pecl.php.net/package/perl
PHP 5 のその他の新機能 [その他の PHP5 の新機能]:
新しいメモリ マネージャー
新しいメモリ管理
Zend Engine には新しいメモリ マネージャーが搭載されています。主な利点は、マルチスレッド環境のサポート (割り当てで相互排他ロックを実行する必要がない) と、各リクエスト後に割り当てられたメモリを解放することと、これが基盤となるインフラストラクチャであるため、ロックの方がはるかに効率的であることです。変更
エンドユーザーは直接気付かないでしょう
Zend エンジンは新しいメモリ管理を備えています。 2 つの主な利点は、マルチスレッド環境のサポートの向上 (割り当てにこれ以上の排他的ロックが必要ない) と、各リクエスト後の割り当てられたメモリ ユニットのより効率的な解放です。これは
根本的な構造変更であるため、エンドユーザーはこの変更に直接気づくことはありません。
Windows 95 のサポートの終了
Windows 95 のサポートの終了
PHP が使用する機能をサポートしていないため、Windows 95 プラットフォームでの PHP の実行はサポートされなくなりました
Microsoft が 1 年以上前に正式にサポートを停止しました。 PHP 開発コミュニティは、これは
Windows 95 上で実行される PHP のサポートを終了することを決定しました。 PHP の機能をサポートしていないためです。 Microsoft は 1 年前に Windows 95 のサポートを正式に終了したため、PHP 開発チームはこれが賢明な決定であると信じています。
概要 [概要]
あなたは、PHP 5 の多くの改善点にきっと感銘を受けるはずです。前に述べたように、この章ではすべての改善点を説明するのではなく、
主要な改善点のみを取り上げます。その他の改善点には追加機能が含まれています。 、多くのバグ修正
と非常に改善されたインフラストラクチャ
では、PHP 5 について説明し、言及された新機能やその他の機能について詳しく説明します
。最初の説明のため、この章ではすべてを説明するのではなく、主な改善点のみを説明します。その他の改善には、アクセシビリティの改善、多数のバグ修正、および最も根本的な構造の改善が含まれます。
次の章では PHP5 について説明し、新機能とその他の不足機能について詳しく説明します。