ホームページ バックエンド開発 PHPチュートリアル PHPクラスとオブジェクト関数の詳しい解説例_PHPチュートリアル

PHPクラスとオブジェクト関数の詳しい解説例_PHPチュートリアル

Jul 13, 2016 am 10:41 AM
関数 物体

1.interface_exists、class_exists、method_exists、および property_exists:

名前が示すように、上記の関数の名前からいくつかの機能を推測できます。これが、PHP について学ぶにつれてこのプログラミング言語がますます好きになる理由だと思います。以下にそのプロトタイプの宣言と簡単な説明を示します。詳細については、サンプル コードを見てみましょう。
bool Interface_exists (string $interface_name [, bool $autoload = true ]) は、インターフェイスが存在するかどうかを決定します。2 番目のパラメーターは、検索時に __autoload を実行するかどうかを示します。
bool class_exists (string $class_name [, bool $autoload = true ]) 2 番目のパラメーターは、検索時に __autoload を実行するかどうかを示します。
bool method_exists (mixed $object, string $method_name) 指定されたクラスまたはオブジェクトに指定されたメンバー関数が含まれているかどうかを判断します。
bool property_exists (mixed $class, string $property) 指定されたクラスまたはオブジェクトに指定されたメンバー変数が含まれるかどうかを判断します。
//another_test_class.php内
インターフェース AnotherTestInterface {
}
クラス AnotherTestClass {
パブリック静的関数 printMe() {
print "これは Test2::printSelf.n です";
}
パブリック関数 doSomething() {
print "これは Test2::doSomething.n";
}
パブリック関数 doSomethingWithArgs($arg1, $arg2) {
print 'これは Test2::doSomethingWithArgs with ($arg1 = '.$arg1.' and $arg2 = '.$arg2.").n";
}
}
//class_exist_test.php では、以下のテスト コードで必要なクラスとインターフェイスは another_test_class.php にあります。
//ここからパターンを見つけることができます。クラスとインターフェイスの名前はキャメルケースで示されており、ファイル名の単語はアンダースコアで区切られています。
//ここでは 2 つの __autoload メソッドが示されています。最初のメソッドがより一般的に使用され、便利であるため、ここでは 2 番目のメソッドをコメント化しています。それらの違いについてはマニュアルを参照してください。
関数 __autoload($classname) {
$nomilizedClassname = strto lower(preg_replace('/([A-Z]w*)([A-Z]w*)([A-Z]w*)/','${1}_${2}_${3}' ,$クラス名));
strto lower($nomilizedClassname).".php";
が必要です
}
//spl_autoload_register(function($classname) {
// $nomilizedClassname = strto lower(preg_replace('/([A-Z]w*)([A-Z]w*)([A-Z]w*)/','${1}_${2}_${3 }',$クラス名));
// require strto lower($nomilizedClassname).".php";
//});
print "次のケースは autoload.n を実行する前にテストされます";
if (!class_exists('AnotherTestClass',false)) {
Print "autoload.n がない場合、このクラスは存在しません";
}
if (!interface_exists('AnotherTestInterface',false)) {
Print "autoload.n がない場合、このインターフェイスは存在しません";
}
print "n次のケースは autoload.n の実行後にテストされます";
if (class_exists('AnotherTestClass',true)) {
Print "autoload が true.n に設定されている場合、このクラスは存在します";
}
if (interface_exists('AnotherTestInterface',true)) {
Print "このインターフェイスは、autoload が true.n に設定されている場合に存在します";
}
実行結果は次のとおりです:
bogon:TestPhp$ php class_exist_test.php
次のケースは自動ロードを実行する前にテストされます。
自動ロードがない場合、このクラスは存在しません。
自動ロードがない場合、このインターフェースは存在しません。
以下のケースはオートロード実行後にテストされます。
このクラスは、autoload が true に設定されている場合に存在します。
2. get_declared_classes と get_declared_interfaces:
現在アクセス可能なすべてのクラスとインターフェイスをそれぞれ返します。これには、カスタム クラスとインターフェイスだけでなく、PHP の組み込みクラスとインターフェイスも含まれます。これらの関数の宣言は非常に単純で、パラメーターはなく、配列を返すだけです。次のコードを参照してください:
インターフェース AnotherTestInterface {
}
クラス AnotherTestClass {
パブリック静的関数 printMe() {
print "これは Test2::printSelf.n です";
}
}
print_r(get_declared_interfaces());
print_r(get_declared_classes());
出力結果が長すぎることと、この 2 つの関数は比較的単純であるため、出力結果は以下に示しません。
3. get_class_methods、get_class_vars、および get_object_vars:
これら 3 つの関数には共通点が 1 つあります。それは、スコープの表示範囲内のすべてのメンバー関数、メンバー変数、または非静的メンバー変数のみを取得できるということです。たとえば、クラス内で呼び出された場合は、すべてのメンバー関数または変数が条件を満たしますが、クラス外で呼び出された場合は、共通の関数および変数のみを返すことができます。
array get_class_methods (mixed $class_name) 指定されたクラスでアクセス可能なメンバー関数を取得します。
array get_class_vars (string $class_name) 指定されたクラスでアクセス可能なメンバー変数を取得します。
array get_object_vars (object $object) アクセス可能な非静的メンバー変数を取得します。
関数出力配列($functionName, $items) {
"$functionName.................................n" を印刷します;
foreach ($items as $key => $value) {
print '$key = '.$key ' =>
}
}
クラス TestClass {
パブリック $publicVar = 1;
プライベート $privateVar = 2;
静的プライベート $staticPrivateVar = "こんにちは";
静的パブリック$staticPublicVar;
プライベート関数 privateFunction() {
}
関数 publicFunction() {
Output_array("get_class_methods",get_class_methods(__CLASS__));
Output_array('get_class_vars',get_class_vars(__CLASS__));
Output_array('get_object_vars',get_object_vars($this));
}
}
$testObj = 新しい TestClass();
print "以下は TestClass.n 内での出力です";
$testObj->publicFunction();
print "n次は​​ TestClass.n からの出力です";
output_array('get_class_methods',get_class_methods('TestClass'));
output_array('get_class_vars',get_class_vars('TestClass'));
output_array('get_object_vars',get_object_vars($testObj));
実行結果は次のとおりです:
bogon:TestPhp liulei$ php class_exist_test.php
以下はTestClass内での出力です。
get_class_methods....
$key = 0 => $value = privateFunction
$key = 1 => $value = publicFunction
get_class_vars....
$key = publicVar => $value = 1
$key = privateVar => $value = 2
$key = staticPrivateVar => $value = こんにちは
$key = staticPublicVar => $value =
get_object_vars....
$key = publicVar => $value = 1
$key = privateVar => $value = 2
以下はTestClassからの出力です。
get_class_methods....
$key = 0 => $value = publicFunction
get_class_vars....
$key = publicVar => $value = 1
$key = staticPublicVar => $value =
get_object_vars....
$key = publicVar => $value = 1
4. get_called_class と get_class:
string get_class ([ object $object = NULL ]) パラメータオブジェクトのクラス名を取得します。
string get_called_class (void) 静的メソッドが呼び出されたときの現在のクラス名。
クラスベース{
静的パブリック関数 test() {
var_dump(get_called_class());
}
}
クラス派生はBaseを拡張します{
}
Base::test();
導出::test();
var_dump(get_class(new Base()));
var_dump(get_class(new Derive()));
実行結果は次のとおりです:
bogon:TestPhp$ php another_test_class.php
文字列(4)「ベース」
string(6) "派生"
文字列(4)「ベース」
string(6) "派生"
5. get_parent_class、is_a、is_subclass_of:
これら 3 つの関数はすべてクラスの継承に関連しているため、グループ化しました。
string get_parent_class ([mixed $object ]) パラメータオブジェクトの親クラスを取得します。親クラスがない場合は false を返します。
bool is_a (object $object, string $class_name) 最初のパラメーターのオブジェクトが $class_name クラス自体であるか、その親クラスのオブジェクトであるかを決定します。
bool is_subclass_of (mixed $object, string $class_name) 最初のパラメーター オブジェクトが $class_name のサブクラスかどうかを判断します。
クラスベース{
静的パブリック関数 test() {
var_dump(get_called_class());
}
}
クラス派生はBaseを拡張します{
}
var_dump(get_parent_class(new Derive()));
var_dump(is_a(new Derive(),'Derive'));
var_dump(is_a(new Derive(),'Base'));
var_dump(is_a(new Base(),'Derive'));
var_dump(is_subclass_of(new Derive(),'Derive'));
var_dump(is_subclass_of(new Derive(),'Base'));
実行結果は次のとおりです:
bogon:TestPhp$ php another_test_class.php
文字列(4)「ベース」
ブール(真)
ブール(真)
ブール(偽)
ブール(偽)
ブール(真)

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/678024.html技術記事 1.interface_exists、class_exists、method_exists、property_exists: 名前が示すように、上記の関数の名前から一部の関数を推測できます。私がフォローしているのはこれだと思います...
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、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)

golang 関数で新しい関数を動的に作成するためのヒント golang 関数で新しい関数を動的に作成するためのヒント Apr 25, 2024 pm 02:39 PM

Go 言語は、クロージャとリフレクションという 2 つの動的関数作成テクノロジを提供します。クロージャを使用すると、クロージャ スコープ内の変数にアクセスでき、リフレクションでは FuncOf 関数を使用して新しい関数を作成できます。これらのテクノロジーは、HTTP ルーターのカスタマイズ、高度にカスタマイズ可能なシステムの実装、プラグイン可能なコンポーネントの構築に役立ちます。

C++ 関数の命名におけるパラメーターの順序に関する考慮事項 C++ 関数の命名におけるパラメーターの順序に関する考慮事項 Apr 24, 2024 pm 04:21 PM

C++ 関数の名前付けでは、読みやすさを向上させ、エラーを減らし、リファクタリングを容易にするために、パラメーターの順序を考慮することが重要です。一般的なパラメータの順序規則には、アクション-オブジェクト、オブジェクト-アクション、意味論的な意味、および標準ライブラリへの準拠が含まれます。最適な順序は、関数の目的、パラメーターの種類、潜在的な混乱、および言語規約によって異なります。

Java で効率的で保守しやすい関数を記述するにはどうすればよいでしょうか? Java で効率的で保守しやすい関数を記述するにはどうすればよいでしょうか? Apr 24, 2024 am 11:33 AM

効率的で保守しやすい Java 関数を作成するための鍵は、シンプルに保つことです。意味のある名前を付けてください。特殊な状況に対処します。適切な可視性を使用してください。

Excel関数の公式の完全なコレクション Excel関数の公式の完全なコレクション May 07, 2024 pm 12:04 PM

1. SUM 関数は、列またはセルのグループ内の数値を合計するために使用されます (例: =SUM(A1:J10))。 2. AVERAGE 関数は、列またはセルのグループ内の数値の平均を計算するために使用されます (例: =AVERAGE(A1:A10))。 3. COUNT 関数。列またはセルのグループ内の数値またはテキストの数をカウントするために使用されます。例: =COUNT(A1:A10)。 4. IF 関数。指定された条件に基づいて論理的な判断を行い、結果を返すために使用されます。対応する結果。

C++関数のデフォルトパラメータと可変パラメータの長所と短所の比較 C++関数のデフォルトパラメータと可変パラメータの長所と短所の比較 Apr 21, 2024 am 10:21 AM

C++ 関数のデフォルト パラメーターの利点には、呼び出しの簡素化、可読性の向上、エラーの回避などがあります。欠点は、柔軟性が限られていることと、名前の制限があることです。可変引数パラメーターの利点には、無制限の柔軟性と動的バインディングが含まれます。欠点としては、複雑さの増大、暗黙的な型変換、デバッグの難しさなどが挙げられます。

MySQLクエリ結果の配列をオブジェクトに変換するにはどうすればよいですか? MySQLクエリ結果の配列をオブジェクトに変換するにはどうすればよいですか? Apr 29, 2024 pm 01:09 PM

MySQL クエリ結果の配列をオブジェクトに変換する方法は次のとおりです。 空のオブジェクト配列を作成します。結果の配列をループし、行ごとに新しいオブジェクトを作成します。 foreach ループを使用して、各行のキーと値のペアを新しいオブジェクトの対応するプロパティに割り当てます。新しいオブジェクトをオブジェクト配列に追加します。データベース接続を閉じます。

参照型を返す C++ 関数の利点は何ですか? 参照型を返す C++ 関数の利点は何ですか? Apr 20, 2024 pm 09:12 PM

C++ で参照型を返す関数の利点は次のとおりです。 パフォーマンスの向上: 参照による受け渡しによりオブジェクトのコピーが回避され、メモリと時間が節約されます。直接変更: 呼び出し元は、返された参照オブジェクトを再割り当てせずに直接変更できます。コードの簡素化: 参照渡しによりコードが簡素化され、追加の代入操作は必要ありません。

PHP における配列とオブジェクトの違いは何ですか? PHP における配列とオブジェクトの違いは何ですか? Apr 29, 2024 pm 02:39 PM

PHP では、配列は順序付けられたシーケンスであり、要素はインデックスによってアクセスされます。オブジェクトは、new キーワードによって作成されたプロパティとメソッドを持つエンティティです。配列へのアクセスはインデックス経由で、オブジェクトへのアクセスはプロパティ/メソッド経由で行われます。配列値が渡され、オブジェクト参照が渡されます。

See all articles