完全限定名称访问四类全局成员的方式
// 1非限制名称:类名称前不允许有反斜线
// $result = demo1::index();
$result = namespace\demo1::index();
echo '<pre>'.print_r($result,true).'</pre>';
echo '<hr>';
// 2使用完全限定名称 访问具有完整命名空间的成员
require 'demo3.php';
// 完全限定名称的类名,必须要从全局空间进行查询
$result2 = \chapter1\lib\demo1::index();
echo '<pre>'.print_r($result2,true).'</pre>';
// 3使用限定名称来访问具有空间的成员
// 限定名称,可以看作是完全限定名称的一个子集
// 只要一个类名称前面至少有一个 \ ,而且这个 \ 不是第一个字符,他一定是限定名称
echo '<hr>';
require 'demo4.php';
class test implements api\itest
{
public static function hello()
{
return self::class;
}
}
$result3 = class_implements(test::hello());
echo '<pre>'.print_r($result3,true).'</pre>';
// 4命名空间常量
// echo __NAMESPACE__;
// call_user_func(['类名','类中的静态方法']);
echo '<hr>';
$result4 = call_user_func([__NAMESPACE__.'\lib\demo1','index']);
echo '<pre>'.print_r($result4,true).'</pre>';
导入四类全局全局成员的方式
namespace chapter1;
// 1导入完全限定名称的类
use chapter1\lib\demo1;
require 'demo3.php';
$result = demo1::index();
// 2导入完全限定名称的接口
require 'demo4.php';
use chapter1\api\itest;
class test implements itest
{
public static function hello()
{
return class_implements(self::class);
}
}
$result = test::hello();
// 3导入完全限定名称的函数
require 'demo5.php';
use function chapter1\common\getinfoname;
$result = getinfoname();
// 4导入完全限定名称的常量
require 'demo6.php';
use const chapter1\param\name;
$result = name;
// use 导入命名空间
use chapter1\lib;
$result = lib\demo1::index();
全局成中的别名引用方式
// 别名机制
class user
{
}
require 'demo8.php';
use chapter1\admin\user as userclass;
$result = userclass::name();
echo '<pre>'.print_r($result,true).'<pre>';
完全限定名称, 限定名称与非限定名称
非限定用use | 完全限定:命名空间根目录相同即可
use 解决了什么什么?
声明使用某个命名空间中的类
::class操作符为什么比NAMESPACE好用? 具体应用场景有哪些?
我觉得更简洁。