php5
抽象クラス
抽象クラスはインスタンス化できません。
抽象クラスでは、他のクラスと同様に、変数とメソッドを定義できます。
抽象クラスは抽象メソッドを定義することもできます。抽象クラスのメソッドは実行されませんが、その派生クラスで実行される可能性があります。
例 6: 抽象クラス
abstract class foo {
protected $x;
abstract function display();
function setX($x) {
$this->x = $x;
}
}
class foo2 extends foo {
function display() {
// Code
}
}
?>
__call
PHP5 オブジェクトは特別なメソッド __call() を追加しました、このメソッドが使用されます 他のメソッドを監視しますオブジェクトの中で。オブジェクトに存在しないメソッドを呼び出そうとすると、__call メソッドが自動的に呼び出されます。
例 7: __call
class foo {
function __call($name,$arguments) {
print("電話しましたか? $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($arguments[0]);
}
} プライベート関数 foo_for_int($x) {
print("ああ int!");
} プライベート関数 foo_for_string($x) {
print("ああ 文字列!");
}
} $x = new Magic();
$x->foo(3);
$x->foo("3");
?>
__set と __get
これは素晴らしいメソッドです、__set と __get メソッドオブジェクトに存在しない変数やメソッドをキャプチャするために使用できます。
例 9: __set と __get
class foo {
function __set($name,$val) {
print("こんにちは、$name に $val を入れようとしました");
}
function __get($name) {
print("$name を要求しました");
}
}
$x = new foo();
$x->bar = 3;
print($x- > ;winky_winky);
?>
型の指示
PHP5 では、オブジェクトのメソッドで、そのパラメーターが別のオブジェクトのインスタンスである必要があることを指定できます。
例 10: 型の表示
class foo {
// コード ...
}
class bar {
public function process_a_foo(foo $foo) {
// 一部のコード
}
}
$b = new bar();
$f = new foo();
$b->process_a_foo($f);
?>
パラメーター名の前にオブジェクトを明示的に指定できることがわかります。 PHP5 は、このパラメータがオブジェクト インスタンスであることを認識します。
静的メンバー
静的メンバーや静的メソッドは、オブジェクト指向プログラミングの用語では「オブジェクトメソッド(クラスメソッド)」「オブジェクト変数(クラス変数)」と呼ばれます。
「オブジェクトメソッド」は、オブジェクトがインスタンス化される前に呼び出すことができます。同様に、「オブジェクト変数」は、オブジェクトがインスタンス化される前に (オブジェクトの制御にオブジェクトのメソッドを使用せずに) 独立して制御できます。
例 11: オブジェクトのメソッドとオブジェクト変数
class calculator {
static public $pi = 3.14151692;
static public function add($x,$y) {
return $x + $y
; }
}
$s = calculator::$pi;
$result = calculator::add(3,7);
print("$result");
?>
例外処理
例外処理はプログラム エラーを処理するための理想的な方法として認識されているこの概念は、Java と C++ の両方にあります。PHP5 にこのアプリケーションがすでに追加されていることを嬉しく思います。 「try」と「catch」を使用してプログラム エラーを制御してみることができます。
例 12: 例外処理
class foo {
function dive($x,$y) {
if($y==0) throw new Exception("cannot by zero"); return $x/$y;
}
}
$x = new foo();
try {
$x->divide(3,0);
catch (Exception $e) {
echo $e - >getMessage();
echo "n
n";
// ここに致命的な対策がいくつかあります
}
?>
上の例では、中括弧内のステートメントを実行するために "try" を使用しています。 、エラーが発生した場合、コードは処理のためにエラーを「catch」句に渡します。これにより、「catch」句でエラーが処理のためにオブジェクトに渡されることを指定する必要があります。すべてのエラー メッセージを処理するオブジェクトに渡すことができるので、コード構造がより明確になります。
カスタムエラー処理
カスタム エラー処理コードを使用すると、プログラム内の事故を簡単に制御できます。独自のエラー制御クラスを例外クラスから派生する必要があるだけです。独自のエラー制御クラスには、コンストラクターと getMessage メソッドが必要です。以下にその例を示します。
例 13: カスタム エラー処理
class WeirdProblem extends Exception {
private $data;
function WeirdProblem($data) {
parent::Exception();
$this->data = $ data;
}
function getMessage() {
return $this->data . " 奇妙な例外が発生しました!";
}
}
?>
これで、 "throw new WeirdProblem($foo) " を使用できるようになりましたエラーハンドラーをスローします。「try」コードブロックでエラーが発生した場合、PHP5 は自動的にエラーを「catch」部分に渡して処理します。
名前空間
名前空間は、クラスや関数をグループ化するのに役立ちます。関連するクラスや関数をグループ化して、後で簡単に呼び出すことができます。
例 14: 名前空間
namespace Math {
class Complex {
//...code...
function __construct() {
print("hey");
}
}
} $m = new Math::Complex();
?>
実際のアプリケーションでは、同じ名前で 2 つ以上のオブジェクトを宣言する必要がある場合があります。 、その後、それらを異なる名前空間に置くことができます (ただし、インターフェイスは同じである必要があります)。
翻訳者注: この記事は PHPbuilder からのものです。上記のテキストから、PHP5 にいくつかの優れた新機能が追加されたことを嬉しく思います。また、PHP5 はまだ正式にリリースされていませんが、PHP 愛好家全員にさらなる驚きをもたらすことを期待しています。この側面に興味のある友人は、PHP 公式ニュース グループにログインして更新情報を知ることができます。ニュース グループのアドレスは、news://news.php.net です。Web インターフェイス http://news.php.net にログインしてアクセスすることもできます。新しいバージョンのリリースを楽しみに待ちましょう。 :) (Beyond PHP Avenger)
注: この記事はオリジナル記事であり、著作権は記事の著者および Beyond PHP Web サイトに帰属し、このサイトの許可なく商業的に複製することは禁止されています。非営利サイトや個人サイトに転載する場合は出典を明記してください