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

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

WBOY
WBOYオリジナル
2016-07-13 10:41:34947ブラウズ

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 までご連絡ください。