Interface_exists, class_exists, method_exists, and property_exists:
As the name suggests, from the naming of the above functions, you can guess some of their functions. I think this is why I like this programming language more and more as I learn more about PHP. Let's give their prototype declaration and a short description first. More is to look directly at the example code.
bool interface_exists (string $ interface_name [, bool $ autoload = true]) Determines whether the interface exists. The second parameter indicates whether to execute __autoload when searching.
bool class_exists (string $ class_name [, bool $ autoload = true]) Determines whether the class exists. The second parameter indicates whether to execute __autoload when searching.
bool method_exists (mixed $ object, string $ method_name) Determines whether the specified class or object contains the specified member function.
bool property_exists (mixed $ class, string $ property) Determines whether the specified class or object contains the specified member variable.
Copy code
<? php
// in another_test_class.php
interface AnotherTestInterface {
}
class AnotherTestClass {
public static function printMe () {
print "This is Test2 :: printSelf. \ n";
}
public function doSomething () {
print "This is Test2 :: doSomething. \ n";
}
public function doSomethingWithArgs ($ arg1, $ arg2) {
print 'This is Test2 :: doSomethingWithArgs with ($ arg1 ='. $ arg1. 'and $ arg2 ='. $ arg2. "). \ n";
}
}
<? php
// in class_exist_test.php, the classes and interfaces required in the following test code are located in another_test_class.php,
// You can find the rule, the names of the classes and interfaces are hump style, and the words in the file name are separated by underscores.
// Here are two ways of __autoload, because the first way is more commonly used and convenient, so we commented out the second way here, the difference between them can be found in manual.
function __autoload ($ classname) {
$ nomilizedClassname = strtolower (preg_replace ('/ ([AZ] \ w *) ([AZ] \ w *) ([AZ] \ w *) /', '$ {1} _ $ {2} _ $ {3 } ', $ classname));
require strtolower ($ nomilizedClassname). ". php";
}
// spl_autoload_register (function ($ classname) {
// $ nomilizedClassname = strtolower (preg_replace ('/ ([AZ] \ w *) ([AZ] \ w *) ([AZ] \ w *) /', '$ {1} _ $ {2} _ $ (3) ', $ classname));
// require strtolower ($ nomilizedClassname). ". php";
//});
print "The following case is tested before executing autoload. \ n";
if (! class_exists ('AnotherTestClass', false)) {
print "This class doesn't exist if no autoload. \ n";
}
if (! interface_exists ('AnotherTestInterface', false)) {
print "This interface doesn't exist if no autoload. \ n";
}
print "\ nThe following case is tested after executing autoload. \ n";
if (class_exists ('AnotherTestClass', true)) {
print "This class exists if autoload is set to true. \ n";
}
if (interface_exists ('AnotherTestInterface', true)) {
print "This interface exists if autoload is set to true. \ n";
}
Copy code
The results are as follows:
Copy code
bogon: TestPhp $ php class_exist_test.php
The following case is tested before executing autoload.
This class doesn't exist if no autoload.
This interface doesn't exist if no autoload.
The following case is tested after executing autoload.
This class exists if autoload is set to true.
This interface exists if autoload is set to true.
Copy code
2. get_declared_classes and get_declared_interfaces:
Returns all classes and interfaces currently accessible, including not only custom classes and interfaces, but also PHP built-in classes and interfaces. Their function declaration is very simple. It takes no parameters and just returns an array. See the following code:
Copy code
<? php
interface AnotherTestInterface {
}
class AnotherTestClass {
public static function printMe () {
print "This is Test2 :: printSelf. \ n";
}
}
print_r (get_declared_interfaces ());
print_r (get_declared_classes ());
Copy code
Because the output is too long, and these two functions are relatively simple, the output will not be given below.
3. get_class_methods, get_class_vars, and get_object_vars:
These three functions have one thing in common, that is, they can only get all member functions, member variables, or non-static member variables in the visible range of the scope. For example, when called inside a class, all member functions or variables meet the conditions, while outside the class, only common functions and variables can be returned.
array get_class_methods (mixed $ class_name) Gets the member functions accessible in the specified class.
array get_class_vars (string $ class_name) Gets the member variables accessible in the specified class.
array get_object_vars (object $ object) Gets the accessible non-static member variables.
$ testObj = new TestClass ();
print "The following is output within TestClass. \ n";
$ testObj-> publicFunction ();
print "\ nThe following is output out of 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));
Copy code
The results are as follows:
Copy code
bogon: TestPhp liulei $ php class_exist_test.php
The following is output within 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 = hello
$ key = staticPublicVar => $ value =
get_object_vars ...........
$ key = publicVar => $ value = 1
$ key = privateVar => $ value = 2
The following is output out of 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
Copy code
4. get_called_class and get_class:
string get_class ([object $ object = NULL]) Get the class name of the parameter object.
string get_called_class (void) The current class name when the static method is called.
Copy code
<? php
class Base {
static public function test () {
var_dump (get_called_class ());
}
}
class Derive extends Base {
}
Base :: test ();
Derive :: test ();
var_dump (get_class (new Base ()));
var_dump (get_class (new Derive ()));
Copy code
The results are as follows:
These three functions are all related to class inheritance, so I put them together.
string get_parent_class ([mixed $ object]) Get the parent class of the parameter object, or false if there is no parent class.
bool is_a (object $ object, string $ class_name) Determines whether the first parameter object is an object of the $ class_name class itself or its parent.
bool is_subclass_of (mixed $ object, string $ class_name) Determines whether the first parameter object is a subclass of $ class_name.
Copy code
<? php
class Base {
static public function test () {
var_dump (get_called_class ());
}
}
class Derive extends 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'));
Copy code
The results are as follows:
The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion;
products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the
content of the page makes you feel confusing, please write us an email, we will handle the problem
within 5 days after receiving your email.
If you find any instances of plagiarism from the community, please send an email to:
info-contact@alibabacloud.com
and provide relevant evidence. A staff member will contact you within 5 working days.