ホームページ >バックエンド開発 >PHPチュートリアル >PHP5トライアル(2)_PHPチュートリアル
抽象クラス
抽象クラスはインスタンス化できません。
抽象クラスでは、他のクラスと同様に、変数とメソッドを定義できます。
抽象クラスは抽象メソッドを定義することもできます。抽象クラスのメソッドは実行されませんが、その派生クラスで実行される可能性があります。
例 6: 抽象クラス
abstract class foo {
protected $x;
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("電話しましたか? 私は $name!"); $ x = new foo();
$x->doStuff();
この特別なメソッドは「オーバーロード」アクションを実装するために使用できます。パラメータを作成し、プライベート メソッドを呼び出して渡します。
例 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("ああ、整数だ!");
} プライベート関数 foo_for_string($x) {
print("ああ、文字列だ!")
} $x = 新しいMagic();
$x->foo("3");
__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; ;winky_winky);
?>
型の指示
PHP5 では、オブジェクトのパラメータが別のオブジェクトのインスタンスである必要があることを指定できます。
例 10: 型の表示
class foo {
// code ...
}
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);
例外処理は、プログラム エラーを処理するための理想的な方法として認識されており、この概念は Java および C++ で利用可能です。このアプリケーションが PHP5 に追加されたことを嬉しく思います。 「try」と「catch」を使用してプログラム エラーを制御してみることができます。
例 12: 例外処理
class foo {
function dive($x,$y) {
if($y==0) throw new Exception("ゼロで除算できません"); $x/$y を返す
}
}
$x = new foo();
$x->divide(3,0);
} catch (Exception $e) {
echo $e - >getMessage();
echo "n
n";
// ここに致命的な対策があります
?> 上の例では、中括弧で囲まれた関数を実行するために "try" を使用しました。ステートメントでは、エラーが発生した場合、コードは処理のためにエラーを「catch」句に渡します。「catch」句では、エラーが処理のためにオブジェクトに渡されることを指定する必要があります。コード構造を作成する すべてのエラー メッセージをオブジェクトに渡すことができるので、見た目がすっきりします。
カスタム エラー処理
カスタム エラー処理コードを使用して、プログラム内の事故を簡単に制御できます。独自のエラー制御クラスを例外クラスから派生する必要があるだけです。独自のエラー制御クラスには、コンストラクターと getMessage メソッドが必要です。以下にその例を示します。
例 13: カスタム エラー処理
class WeirdProblem extends Exception {
function WeirdProblem($data) {
$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 つ以上のオブジェクトを宣言する必要がある場合があります。それらを異なる名前空間に置くことができます (ただし、インターフェイスは同じである必要があります)。
http://www.bkjia.com/PHPjc/313864.html
www.bkjia.com
true
http://www.bkjia.com/PHPjc/313864.html
技術記事
抽象クラス 抽象クラスはインスタンス化できません。 抽象クラスでは、他のクラスと同様に、変数とメソッドを定義できます。 抽象クラスは抽象メソッドを定義することもできます。抽象クラスのメソッドは実行されません...