注意: この記事は現在進行中です!
この章では PHP クラスを紹介します
さて、基本的にすべての言語はオブジェクト指向をサポートしており、もちろん PHP も例外ではありません。
PHP は以前のバージョンではオブジェクト指向をサポートしていませんでしたが、PHP4 以降は PHP4 を含めてサポートされています。このシリーズでは、PHP5 を例としてオブジェクト指向の知識を説明します。 PHP4の知識についても後述します。
私の個人的な観点から見ると、PHP のオブジェクト指向プログラミングをサポートする機能は、C++、C#、Java などの言語ほど詳しくはありませんが、それでも比較的包括的であると考えられます。
今日は皆さんに、オブジェクト指向の特徴は何ですか?彼らは間違いなく、カプセル化、ポリモーフィズム、継承、はい、それだけですと答えました。
クラス
さて、クラスから始めましょう。クラスの概念については話さないようにしましょう。誰もがそれを知っています。
PHP のクラスは次のように記述できます:
php
class Page
{
}
?> 何も持たない単純なクラス Page を定義します。
1 2 class Page
3 {
4 var $attribute1;
6 var $attribute2;
7
8 // 2 関数
9 function Operation1()
10 15 }
22
23 // 破壊関数
24 destruct()
25 {
26 $this ->PHP はオーバーロードをサポートしていますか? はい、PHP はオーバーロードをサポートしているため、複数の方法で構築できます。
クラスのインスタンス化
クラスを構築した後、それをどのように使用するか?インスタンス化、これは他の言語と同じなので、コードのみが与えられます。
20 $> 27 $this -> 属性 1 = 0 ;
28 }
29 }
30 $instance1 = 新しいページ ( " インスタンス 1 の属性 1 " )
31 $instance2 = 新しいページ ( " インスタンス 2 の属性 2 " ); $instance1 = new Page();
33 ?>
出力結果は次のとおりです:
1 インスタンス 1 に属性 : 属性 1 を構築します
2 インスタンス 2 に属性 : 属性 2 を構築します
3属性:
プロパティを設定または取得する
この質問は興味深いです。
上記の例では、$attribute1 は属性であり、$this ->attribute1 を使用してその値を取得または設定できます。
ただし、クラスのカプセル化をより適切に反映するために、C# の関数に似た PHP が提供する get または set メソッドを引き続き使用します。しかし、PHP では、属性を設定するための __get($name) 関数、__set($name,$value) 関数という 2 つのメソッドが提供されています。
これを行うことのもう 1 つの利点は、実際のニーズに応じて独自のロジックを追加できることです。これは、値を直接割り当てた場合には実行できません。たとえば、属性が 1 から 100 までの数値でなければならない場合はどうすればよいでしょうか? __set を使ってみましょう。コードをご覧ください。構築関数
18 function __construct($param)
19 {
20 $this ->attribute1=$param;
21 echo "属性を構築します: {$this->attribute1}
"; 22}
23
24//破壊関数
25関数__Destruct()
26Tribute2 "&& $ value> = 2 &&属性2< = 100)
32}
41$ instance1 = new page(" aTtribute1 in instance 1 ");
42 $instance2=新しいページ("インスタンス 1 の属性 1");
44 $インスタンス 3-> 属性 2=99;
46 >
クラスメンバーとメソッドの可視性
依然としてパブリック、プライベート、保護されています。 C#と同じ機能を持っています。ただし、PHP のデフォルトはパブリックであり、ほとんどの言語のデフォルトであるプライベートではないことに注意してください。これに基づいて、上記の例を使用できます。もう 1 つ注意すべき点は、これら 3 つのキーワードが使用される場合、var が省略されることです。例を見てみましょう。
1 2 クラス ページ
3 {
4 //2 属性
5 public $attribute1;
6 public $attribute2
7
8 //2 関数
9パブリック関数 Operation1()
10 {
11 }
12
13 public function Operation2($param1,$param2)
14 {
15 }
16
17 //構築関数
18 public function __construct($param)
19 {
20 $this-> ;attribute1=$param;
21 echo "属性を構築します: {$this->attribute1}
";
23
24 //破壊関数
25 パブリック関数 __destruct()
26 {
27 gt;=2&&&attribute2<= ) 47 40 }
41 $instance1=new Page("インスタンス 1 の属性 1");
42 $instance2=new Page("インスタンス 1 の属性 1");
43 $instance3=新しいページ();
44 $instance3->attribute2=99;
46 $instance3->attribute2;
クラスの継承
クラスの継承はC#やJava言語と同じであり、多重継承はサポートしていません。 PHP は extend を使用してクラスを継承します。これは Java に似ています。
Java には Final という言葉があり、PHP にも存在します。機能は似ており、メソッドの継承やオーバーロード、オーバーライドを防ぐことです。
継承について言及しましたが、PHP はインターフェイスをサポートしていますか?サポート。例:
1 php
2 インターフェース IDispose
3 {
4 function Dispose();
5 }
6
7 クラスページは IDispose を拡張します
8 {
9 function Dispose()
10 {
11/ / コードはここにあります。
12 }
13 }
14 ?>
1 2 class Math
3 {
4 const pi=3.1415927;
5 }
6 echo "Math::pi='.Math::pi."n";
7 ? > 実際には、C++ の静的変数と同じです。
4. オブジェクトのクローン
PHP は、オブジェクトをクローンするための最も簡単な言語の 1 つであると思います。コードは次のとおりです:
$c = クローン $b
$c の機能を変更したい場合はどうすればよいでしょうか?現時点では、__clone メソッドをオーバーライドする必要があります。
5. 抽象クラス
PHP は抽象クラスもサポートしており、C# などの言語と非常に似ています。例を挙げてみましょう。
1 2 抽象クラス Shape
3 {
4 抽象保護関数 getSquared();
6 抽象保護関数 getLineCount();
6 パブリック関数 printShapeValue()
7 {
8 echo "サイズは :{$this->getSquared()}
";
9 ; echo "行数は :{$this->getLineCount()}
";
10 }
11}
12 c13 クラス Rectange Extends Shape
14 {
15 保護された関数 Getsquared () {
17 Return 12*12; ecount () 020 {
21 Return 4;
22 }
23 }
24
25 クラス Triangle Shape を拡張します
26 {
27 保護された関数 getSquared()
28 30 }
31 保護された関数 getLineCount()
32 {
33
34 }
35 }
36
37 $rect=new Rectange()
38 $rect; ->printShapeValue();
39
40 $tri=new Triangle();
42 ?> 出力結果は次のとおりです。 : 144
行数は : 4
二乗サイズは : 120
そして行数は : 3
抽象関数に注意 書き方、抽象キーワード。また、サブクラスでは、override キーワードはなく、直接書き換えられます。これは C# とは異なります。
6. __call オーバーロードを使用する
これは、PHP が提供する非常に優れた関数だと思います。このメソッドは、オブジェクト内の他のメソッドを監視するために使用されます。オブジェクトに存在しないメソッドを呼び出そうとすると、__call メソッドが自動的に呼び出されます。
例を挙げてみましょう。コードは次のとおりです。
メソッド test1 が呼び出されました: array ( 4 ) { [ 0 ] => int( 1 ) [ 1 ] => string ( 1 ) " 2 " [ 2 ] => float ( 3.4 ) [ 3 ] => bool( true ) } 配列 ( 3 ) { [ 0 ] => int( 1 ) [ 1 ] => int( 2 ) [ 2 ] => foo- > test1 メソッドは foo クラスに存在しませんが、__call を定義すると動作します。
7. __autoload() メソッドを使用します。 3 require_once $class_name . ' .php '
4 }
5
6 $obj1 = new MyClass1(); = new MyClass2();
8 ?>
8、反復期間または反復を実装します。
クラスのすべての表示される属性と値を反復します
9. 型を文字列に変換します (__toString())
4 public function __toString()
5 {
6こんにちは
10. 反省。
PHP がリフレクションもサポートしているとは予想していませんでした。 C# のリフレクションに精通している場合は、それについて言及する必要はありません。そうでない場合は、読み続けてください。
リフレクションとは、クラスまたはオブジェクトを調べて、そこに含まれる内容に関する情報を調べる機能です。このクラスのドキュメント情報が不明であるか提供されていない場合、クラスの一部の属性、メソッド、およびその他の情報はリフレクションを通じて取得できます。
Reflection は Zend からいくつかのクラスを継承します。具体的な実用的な情報については、PHP リフレクション クラスのドキュメントを参照してください。