命名空间
如果要访问的类保存在全局空间中,那么可以在名称前加”\”。1
new \Person();
NAMESPACE 可以获取当前命名空间
自动加载
autoload()方法用来自动包含类文件,当程序试图实例化未知类的时候,会调用autoload()方法,并且会把
类名当做字符串参数传递进去。所以__autoload()可以用来自定义包含缺失的类文件。1
2
3
4
5function __autoload($classname)
{
include_once "$classname.php";
}
$person = new Person();
没有找到Person类,则会调用__autoload方法,加载相应的类文件
查找类 class_exists
class_exists — 检查类是否已定义 (类名。名字的匹配是不分区大小写的。)
如果由 class_name 所指的类已经定义,此函数返回 TRUE,否则返回 FALSE。1
2
3if (!class_exists('mysqli')) {
emMsg('服务器空间PHP不支持MySqli函数');
}
get_class 和 instanceof
get_class() 函数用来检查对象的类,接收对象作为参数,并返回字符串形式的类名。
instanceof 操作符用来检测左边的对象是否是右边的给定类型的实例。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15class Person{}
$person = new Person();
if (get_class($person) == 'Person') {
echo 'get_class : $person is Person object';
} else {
echo 'get_class : $person is not Person object';
}
if ($person instanceof Person) {
echo 'get_class : $person is Person object';
} else {
echo 'get_class : $person is not Person object';
}
get_class_methods
get_class_methods() 函数 用来得到一个类中所有方法的列表。 参数为类名,
返回类中的所有方法名的数组,注意是public的。1
2
3
4
5
6
7
8
9
10
11
12class Person
{
public function getName()
{
echo 'getName';
}
}
$person = new Person();
$method = 'getName';
if (in_array($method, get_class_methods('Person'))) {
$person->$method();
}
method_exists & is_callable
这两个函数,用于判断对象中方法是否存在,如果方法存在则被调用
is_callable() 函数接收一个回调参数,可以指定一个函数名称或者一个包含方法名和对象的数组,如果在当前作用域中可以执行,就返回TRUE。1
2
3
4
5
if (is_callable(array($object, "SomeMethod"))) {
$object->SomeMethod($this, TRUE);
}
method_exists 判断对象$object如果有一个方法为SomeMethod,则调用。注意,不管类中方法是private、protected还是public,method_exists都返回true。
所有就算method_exists返回true,也不一定能调用1
2
3
4
5
if (method_exists($object, "SomeMethod")) {
$object->SomeMethod($this, TRUE);
}
get_class_vars
get_class_vars() 可以用来查询类的属性,但是只显示public属性。1
2
3
4
5
6
7
8class Person
{
public $var1;
public $var2 = 'xyz';
public $var3 = 100;
protected $var4; // PHP 5
}
var_dump(get_class_vars('Person'));
输出1
2
3
4array (size=3)
'var1' => null
'var2' => string 'xyz' (length=3)
'var3' => int 100
call_user_func & call_user_func_array
- call_user_func用来动态调用方法
调用一个函数1
2
3
4
5function sayHi()
{
echo 'sayHi';
}
call_user_func('sayHi');
也可以调用类方法1
2
3
4
5
6
7
8
9
10
11
12
13
14
15class Person
{
public function sayHello()
{
echo 'sayHello';
}
public function sayHelloTo($name)
{
echo 'hello '.$name;
}
}
$person = new Person();
call_user_func(array($person, 'sayHello'));
call_user_func(array($person, 'sayHelloTo'), 'wang');
- call_user_func_array 可以把 方法的参数 当做数组传入
1
call_user_func_array(array($person, 'sayHelloTo'), ['wang']);