記事ソース: PHPBuilder.com
原著者: Luis Argerich
翻訳: erquan
erquan 注: まだ PHP5 を体験する時間がないので、外国人が書いた記事を翻訳しただけです。
以下はすべて erquan によって翻訳されたもので、これが初めてであり、誰かを誤解させていないことを願っています。多少の誤差はご了承ください。
うまくいくかどうか見てみましょう。うまくいったら、翻訳を終了します。誤解を招かないように、あとは翻訳するだけです。これも面倒です。 。 。 。 :)
再投稿する際は記事の出典を明記してください、ありがとうございます:)
PHP5 の正式バージョンはまだリリースされていませんが、もたらされた PHP の新しい機能を学び、体験することができます開発版によって私たちに。
この記事では、次の 3 つの新しい PHP5 機能に焦点を当てます:
* 新しいオブジェクト モード
* 構造化例外処理
* 名前空間
正式に開始する前に、次の点に注意してください:
*記事内の一部の例は、記事を読みやすくするために PHP4 を使用して実装されています
*この記事で説明されている新機能は、正式版の機能と異なる場合があります。正式版を参照してください。
* 新しいオブジェクト モード
PHP5 の新しいオブジェクト モードは、PHP4 に基づいて大幅に「アップグレード」されています。JAVA によく似たものになります: (.
以下のテキストの一部で実現します。 、PHP5 の新機能を体験し始めるのに役立つ小さな例を示します
さあ~~:)
* コンストラクターとデストラクター
* オブジェクト参照
* クローン オブジェクト
* 3オブジェクトのモード: プライベート、パブリック、保護
* インターフェイス
* 仮想クラス
* __call()
* __set() および __get()
* 静的メンバー
コンストラクターとデストラクター
PHP4 では、クラスと同じ名前の関数がデフォルトでクラスのコンストラクターになり、PHP4 にはデストラクターの概念がありません。 (Erquan の注: これは JAVA と同じです)
しかし、PHP5 からは、コンストラクターの名前は一律 __construct になり、デストラクター: __destruct があります (Erquan の注: これは Delphi と同じです。PHP5 であることがわかります)多くの成熟したオブジェクト指向のアイデアを吸収してくれておめでとうございます ~~):
例 1: コンストラクターとデストラクター
class foo {
var $ x;
function __construct($x) {
$this->x = $x;
}
関数 display() {
print($this ->x);
}
function __destruct() {
print("bye bye");
}
}
$o1 = new foo(4);
$ o1->display();
?>
実行後、「bye bye」という出力が表示されます。これは、クラスが終了するためです。__destruct() デストラクターが呼び出されました~~
。
オブジェクト参照
ご存じのとおり、PHP4 では関数またはメソッドに変数を渡すとき、アドレス演算子 & を使用して宣言しない限り、実際にはコピーが渡されます。
への参照を作成しています。変数。 PHP5 では、オブジェクトは常に参照によって指定されます。
例 2: オブジェクト参照
class foo {
var $x;
function setX( $x) {
$this->x = $x;
}
function getX() {
return $this->x;
}
}
$o1 = new foo;
$o1->setX(4);
$o2 = $o1;
$o1->setX( 5);
if($o1->getX() == $o2->getX()) print("オーマイガッド!");
?>
( Erquan のメモ: あなたはそうするでしょう「Oh my god!」の出力を参照してください)
クローンオブジェクト
は上記の通りです。オブジェクトへの参照を取得したくない場合、コピーを使用したい場合はどうすればよいでしょうか。 PHP5 が提供する __clone メソッドで実装します。
例 3: クローン オブジェクト
class foo {
var $x;
function setX( $ x) {
$this->x = $x;
}
function getX() {
return $this->x;
}
}
$o1 = new foo;
$o1->setX(4);
$o2 = $o1->__clone();
$o1->setX ( 5);
if($o1->getX() != $o2->getX()) print("コピーは独立しています");
?>
オブジェクトのクローンを作成する方法は多くの言語で使用されているため、そのパフォーマンスについて心配する必要はありません :)。
プライベート、パブリック、プロテクト
PHP4 では、メソッドと変数はパブリックであるため、オブジェクトの外部からメソッドと変数を操作できます。PHP5 では、変数とメソッドに対する
制御権限を制御するために 3 つのモードが挙げられています: Public (パブリック)、Protected (保護された)、および Private (プライベート)
パブリック: メソッドと変数はアクセス時にどこでも使用できます
プライベート: クラス内でのみアクセスでき、サブクラスからもアクセスできません
保護: クラスまたはサブクラス内でのみアクセスできます
例 4: パブリック、プロテクト、プライベート
class foo {
private $x;
public function public_foo() {
print("I'm public ");
}
protected function protected_foo() {
$this->private_foo(); //同じクラスにいるので、プライベート メソッドを呼び出すことができます
print ("私は保護されています") ;
}
プライベート関数 private_foo() {
$this->x = 3;
print("私はプライベートです");
class foo2 extends foo {
public function display() {
$this->protected_foo();
$this->public_foo( );
// $ this->private_foo(); // 関数は基本クラスではプライベートです
}
$x = new foo(); public_foo();
//$x->protected_foo(); //無効なため、クラスおよび派生クラスの外で保護されたメソッドを呼び出すことはできません
//$x->private_foo (); //無効なプライベート メソッドクラス内でのみ使用できます
$x2 = new foo2();
$x2->display();
?>
ヒント:変数は常にプライベートです。プライベート変数に直接アクセスすることは、良い OOP アイデアではありません。set/get 関数
を実装する必要があります。
インターフェース
ご存知のとおり、PHP4 で継承を実装するための構文は「class foo extendsparent」です。 PHP4 であっても PHP5 であっても、多重継承はサポートされていません。つまり、1 つのクラスからのみ継承できます。 PHP5 の「インターフェイス」は特別なクラスです。メソッドを具体的に実装するわけではありませんが、メソッドの名前とメソッドが所有する要素を定義し、キーワードを通じてそれらを一緒に参照して特定のアクションを実装するために使用されます。
例 5: インターフェイス
interface displayable {
function display();
}
interface printable {
function doprint( );
}
class foo は、displayable,printable を実装します {
function display() {
// code
}
function doprint() {
// code
}
}
?>
これは、コードを読んで理解するのに非常に役立ちます。このクラスを読むと、foo にインターフェイスが含まれていることがわかります。 displayable と printable が提供されており、print() (Erquan の注: doprint() である必要があります) メソッドと display() メソッドが必要です。 foo の宣言を見る限り、内部でどのように実装されているかを知らなくても簡単に操作できます。
仮想クラス
仮想クラスは、スーパークラスと同様にメソッドや変数を定義できるクラスです。
仮想メソッドは仮想クラスで定義することもできます。このメソッドはこのクラスでは実装できませんが、そのサブクラスで実装する必要があります
例 6: 仮想クラス
php
abstract class foo {
protected $x;
abstract function display();
function setX($x) {
$ this->x = $x;
}
}
class foo2 extends foo {
function display() {
}
}
?>
__call() メソッド
PHP5 では、__call() メソッドを定義すると、クラス内に存在しない変数またはメソッドにアクセスしようとすると、__call() が自動的に呼び出されます。
例 7 : __call
class foo {
function __call($name,$arguments) {
print("電話しましたか? 私' m $name!");
}
}
$x = new foo();
$x->doStuff();
$x- >fancy_stuff ();
?>
このパラメーターの実装と確認にはプライベート パラメーターに依存しているため、この特定のメソッドは通常、「メソッドのオーバーロード」を実装するために使用されます。
例 8: __call はメソッドのオーバーロードを実装します
class Magic {
function __call($name,$arguments) {
if($name= ='foo') {
if(is_int($arguments[0])) $this->foo_for_int($arguments[0]);
if(is_string($arguments[0])) $this ->foo_for_string($ argument[0]);
}
}
プライベート関数 foo_for_int($x) {
print("ああ int!");
}
プライベート関数 foo_for_string($x) {
print("ああ、文字列!");
}
}
$x = new Magic(); >foo(3);
$x->foo("3");
?>
__set() メソッドと __get() メソッド
未定義の変数にアクセスまたは設定する場合、次の 2 つのメソッドが呼び出されます。
例 9: __set と __get
< ?php
class foo {
function __set($name,$val) {
print("こんにちは、$name に $val を入れようとしました");
}
function __get($name) {
print("$name を要求しました");
}
}
$x = new foo ();
$x->bar = 3;
print($x->winky_winky);
?>>