php5
PHP5 はまだ正式にリリースされていませんが (開発バージョンはすでにダウンロード可能です)、新しいバージョンがもたらす驚きを体験し始めることができます。次の紹介では、PHP5 の 3 つの主要な機能に焦点を当てます。これら 3 つの主な機能は次のとおりです:
* 新しいオブジェクト モード (新しいオブジェクト モード)
* 例外処理 (例外)
* 名前空間 (名前空間)
開始する前に、2 つの点を宣言する必要があります:
* 記事内の例 順番操作方法を説明するため、一部PHP4の表現方法を使用していますが、これは記事の読みやすさを向上させるためです。
* 記事で説明されている部分と PHP5 の最終リリース バージョンの間にはいくつかの違いがある可能性があります。
PHP5 が最終的に正式にリリースされる前に、http://snaps.php.net から最新のコンパイル済みバージョンをダウンロードできます。実際に体験してみましょう。PHP5 がもたらすこれらの新機能を見てみましょう。
新しいオブジェクトモード
PHP5 のオブジェクトはより体系的かつ包括的に調整されており、現在の外観は Java にいくらか似ているかもしれません。このセクションでは、PHP5 の新しいオブジェクト モードに焦点を当て、いくつかの簡単な例を示します。このセクションを PHP5 への取り組みの新たな出発点にしてください。 :)
* コンストラクターとデストラクター
* オブジェクトへの参照
* オブジェクトのクローン
* オブジェクトのプライベート、パブリック、保護モード
* インターフェイス (インターフェイス)
* 抽象クラス
* __call
* __set および __get
* 静的メンバー
コンストラクターとデストラクター
PHP4 では、関数がオブジェクトと同じ名前を持つ場合、この関数はオブジェクトのコンストラクターになります。PHP4 にはデストラクターの概念がありません。
PHP5 では、コンストラクターは __construct という名前で統一され、デストラクターの概念が導入され、一律 __destruct という名前が付けられます。
例 1: コンストラクターとデストラクター
class foo {
var $x;
function __construct($x) {
$this->x = $x;
}
function display () {
print($this->x);
}
function __destruct() {
print("bye bye");
}
}
$o1 = new foo(4);
$o1-> ;display( );
?>
上記の例では、foo クラスの呼び出しを終了すると、そのデストラクターが呼び出され、上記の例では「bye bye」が出力されます。
オブジェクト参照
ご存知のとおり、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("Oh my god!");
?>
オブジェクトの複製
上で述べたように、Whenオブジェクトは常に参照として呼び出されます。オブジェクトのコピーを取得したい場合はどうすればよいですか? 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 では、このアクセス許可を制御するために、Public、Protected、Private という 3 つの新しいモードが導入されています。
パブリックモード(Public): オブジェクトの外部での操作制御を可能にします。
プライベート モード (プライベート): このオブジェクト内のメソッドのみが操作および制御を許可されます。
保護モード (保護): このオブジェクトとその親オブジェクトが操作および制御できるようにします。
例 4: オブジェクトのプライベート、パブリック、プロテクトモード
class foo {
private $x;
public function public_foo() {
print("I'm public");
}
protected function protected_foo() {
$this->private_foo(); //同じクラスにいるので、プライベート メソッドを呼び出すことができます
print("I'm protected");
}
private function 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();
$x->public_foo();
//$x->protected_foo(); //無効な場合は、クラスおよび派生クラスの外で保護されたメソッドを呼び出すことはできません
//$x->private_foo(); //無効プライベート メソッドはクラス内でのみ使用できます $x2 = new foo2();
$x2->display();
?>
ヒント: オブジェクト内の変数は常にプライベート形式で存在し、オブジェクト内の 1 つの変数を直接操作しますこれは、オブジェクト指向プログラミングの良い習慣ではありません。より良い方法は、処理のために必要な変数をオブジェクトのメソッドに渡すことです。
インターフェース
ご存知のとおり、PHP4 のオブジェクトは継承をサポートしており、オブジェクトを別のオブジェクトの派生クラスにするには、「class foo extendsparent」のようなコードを使用して制御する必要があります。 PHP4 および PHP5 では、オブジェクトは 1 回のみ継承でき、多重継承はサポートされていません。ただし、PHP5 では、インターフェイスという新しい用語が生まれました。インターフェイスは、特定の処理コードを持たない特殊なオブジェクトであり、その後は、「implement」キーワードを使用して便利に使用できます。必要なインターフェイスが統合され、その後、特定の実行コードが追加されます。
例 5: インターフェイス
interface displayable {
function display();
}
interface printable {
function doprint();
}
class fooimplements displayable,printable {
function display() {
// code
} function doprint() {
// code
}
}
?>
上記の例からわかるように、これはコードの読みやすさと普及を向上させるのに非常に役立ちます。オブジェクト foo には、displayable と printable という 2 つのインターフェイスが含まれています。この時点で、オブジェクト foo には、display() メソッドと print() メソッドが必要であることが明確にわかります。インターフェイス部分を理解するだけで、簡単に操作できます。オブジェクトが内部でどのように動作するかを気にせずにオブジェクトを操作できます。