PHP 13: クラス

Jun 23, 2016 pm 02:36 PM

注意: この記事は現在進行中です!

この章では PHP クラスを紹介します
さて、基本的にすべての言語はオブジェクト指向をサポートしており、もちろん PHP も例外ではありません。
PHP は以前のバージョンではオブジェクト指向をサポートしていませんでしたが、PHP4 以降は PHP4 を含めてサポートされています。このシリーズでは、PHP5 を例としてオブジェクト指向の知識を説明します。 PHP4の知識についても後述します。
私の個人的な観点から見ると、PHP のオブジェクト指向プログラミングをサポートする機能は、C++、C#、Java などの言語ほど詳しくはありませんが、それでも比較的包括的であると考えられます。
今日は皆さんに、オブジェクト指向の特徴は何ですか?彼らは間違いなく、カプセル化、ポリモーフィズム、継承、はい、それだけですと答えました。

クラス
さて、クラスから始めましょう。クラスの概念については話さないようにしましょう。誰もがそれを知っています。
PHP のクラスは次のように記述できます:

class Page
{

}
?> 何も持たない単純なクラス Page を定義します。

属性とメソッドを次のように定義することもできます。答えは「はい、あります!」です。ということはC++と同じなのでしょうか?いいえ、専用の機能があります。
構築には __construct() を使用し、破棄には __destruct() を使用します (注: 先頭に 2 つのアンダースコアがあります)
コードは次のとおりです:

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 2 インターフェース IDispose
3 {
4 function Dispose();
5 }
6
7 クラスページは IDispose を拡張します
8 {
9 function Dispose()
10 {
11/ / コードはここにあります。
12 }
13 }
14 ?>

PHP の新しい高度な機能
1. クラスごとの定数
PHP5 で導入されました。この常識では、再初期化は必要ありません。例:


1 2 class Math
3 {
4 const pi=3.1415927;
5 }
6 echo "Math::pi='.Math::pi."n";
7 ? > 実際には、C++ の静的変数と同じです。

2. 静的関数
静的変数について話しているので、当然、静的関数についても話す必要があります。これを実装するときは、多くの言語で使用される static キーワードを追加する必要があります。これで完了です。
9 echo "Squre:".Shape::SquredSize(10); ;
3. PHP クラスの型チェック
クラスが特定のクラスの型であるかどうかを判断したい場合は、Java を使用したことがある場合は、instanceof と同じであるため、非常によく知られています。 Java. C# を使用している場合は、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 メソッドが自動的に呼び出されます。
例を挙げてみましょう。コードは次のとおりです。


1 2 class Caller
3 {
4 private $x = array(1, 2, 3)
5

6 public function __call($m, $a);
7 { M 8 Print "メソッド $ M が呼び出されました: n";
9 VAR_DUMP ($ A)
10 $ This->test1(1, "2", 3.4、true);
16 var_dump($a) ?>表示される結果は次のとおりです。

メソッド 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() メソッドを使用します。
この機能は今でも素晴らしいです。オブジェクト指向アプリケーションを作成する多くの開発者は、クラス定義ごとに PHP ソース ファイルを作成します。大きな苦痛は、各スクリプトの先頭にインクルード ファイルの長いリスト (クラスごとに 1 つのファイル) を記述しなければならないことです。 PHP 5 では、これは必要なくなりました。これは、コード ビューが未定義のクラスを使用するときに自動的に呼び出される __autoload 関数を使用して簡単に実行できます。この関数を呼び出すことにより、スクリプト エンジンはエラーで失敗する前に、必要なクラスをロードする最後のチャンスを得ることができます。ただし、__autoload 関数によってスローされた例外は catch ステートメント ブロックによってキャッチできず、致命的なエラーにつながることに注意してください。
例:
1 2 function __autoload( $class_name ) {

3 require_once $class_name . ' .php '
4 }
5
6 $obj1 = new MyClass1(); = new MyClass2();
8 ?>

8、反復期間または反復を実装します。
クラスのすべての表示される属性と値を反復します
9. 型を文字列に変換します (__toString())

これは、魔法の関数 __toString() の応用です。 C# 機能は同じですが、クラス自体に違いがあります。この関数を PHP クラスに実装すると、クラスを出力するときにこの関数が呼び出されます。例:

1 2 class Page
3 {

4 public function __toString()
5 {
6こんにちは
10. 反省。
PHP がリフレクションもサポートしているとは予想していませんでした。 C# のリフレクションに精通している場合は、それについて言及する必要はありません。そうでない場合は、読み続けてください。
リフレクションとは、クラスまたはオブジェクトを調べて、そこに含まれる内容に関する情報を調べる機能です。このクラスのドキュメント情報が不明であるか提供されていない場合、クラスの一部の属性、メソッド、およびその他の情報はリフレクションを通じて取得できます。
Reflection は Zend からいくつかのクラスを継承します。具体的な実用的な情報については、PHP リフレクション クラスのドキュメントを参照してください。


このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

11ベストPHP URLショートナースクリプト(無料およびプレミアム) 11ベストPHP URLショートナースクリプト(無料およびプレミアム) Mar 03, 2025 am 10:49 AM

多くの場合、キーワードと追跡パラメーターで散らかった長いURLは、訪問者を阻止できます。 URL短縮スクリプトはソリューションを提供し、ソーシャルメディアやその他のプラットフォームに最適な簡潔なリンクを作成します。 これらのスクリプトは、個々のWebサイトにとって価値があります

Instagram APIの紹介 Instagram APIの紹介 Mar 02, 2025 am 09:32 AM

2012年のFacebookによる有名な買収に続いて、Instagramはサードパーティの使用のために2セットのAPIを採用しました。これらはInstagramグラフAPIとInstagram Basic Display APIです。

Laravelでフラッシュセッションデータを使用します Laravelでフラッシュセッションデータを使用します Mar 12, 2025 pm 05:08 PM

Laravelは、直感的なフラッシュメソッドを使用して、一時的なセッションデータの処理を簡素化します。これは、アプリケーション内に簡単なメッセージ、アラート、または通知を表示するのに最適です。 データは、デフォルトで次の要求のためにのみ持続します。 $リクエスト -

LaravelのバックエンドでReactアプリを構築する:パート2、React LaravelのバックエンドでReactアプリを構築する:パート2、React Mar 04, 2025 am 09:33 AM

これは、LaravelバックエンドとのReactアプリケーションの構築に関するシリーズの2番目と最終部分です。シリーズの最初の部分では、基本的な製品上場アプリケーションのためにLaravelを使用してRESTFUL APIを作成しました。このチュートリアルでは、開発者になります

Laravelテストでの簡略化されたHTTP応答のモッキング Laravelテストでの簡略化されたHTTP応答のモッキング Mar 12, 2025 pm 05:09 PM

Laravelは簡潔なHTTP応答シミュレーション構文を提供し、HTTP相互作用テストを簡素化します。このアプローチは、テストシミュレーションをより直感的にしながら、コード冗長性を大幅に削減します。 基本的な実装は、さまざまな応答タイプのショートカットを提供します。 Illuminate \ support \ facades \ httpを使用します。 http :: fake([[ 'google.com' => 'hello world'、 'github.com' => ['foo' => 'bar']、 'forge.laravel.com' =>

PHPのカール:REST APIでPHPカール拡張機能を使用する方法 PHPのカール:REST APIでPHPカール拡張機能を使用する方法 Mar 14, 2025 am 11:42 AM

PHPクライアントURL(CURL)拡張機能は、開発者にとって強力なツールであり、リモートサーバーやREST APIとのシームレスな対話を可能にします。尊敬されるマルチプロトコルファイル転送ライブラリであるLibcurlを活用することにより、PHP Curlは効率的なexecuを促進します

Codecanyonで12の最高のPHPチャットスクリプト Codecanyonで12の最高のPHPチャットスクリプト Mar 13, 2025 pm 12:08 PM

顧客の最も差し迫った問題にリアルタイムでインスタントソリューションを提供したいですか? ライブチャットを使用すると、顧客とのリアルタイムな会話を行い、すぐに問題を解決できます。それはあなたがあなたのカスタムにより速いサービスを提供することを可能にします

2025 PHP状況調査の発表 2025 PHP状況調査の発表 Mar 03, 2025 pm 04:20 PM

2025 PHP Landscape Surveyは、現在のPHP開発動向を調査しています。 開発者や企業に洞察を提供することを目的とした、フレームワークの使用、展開方法、および課題を調査します。 この調査では、現代のPHP Versioの成長が予想されています

See all articles