命名空间:别名与导入
一、在某个空间中访问类与访问函数
namespace php\one
{
include 'demo1.php';
// 其他空间中的类
$demo = new \Demo();
function func1(){
echo '我是php\one空间中的函数func1()<br>';
}
function var_dump($name)
{
echo 'hello,你调用的是我哦...'. $name . '<br>';
}
// 调用的函数
func1();//我是php\one空间中的函数func1()
echo "<hr>";
\func1();//我是公共空间中的函数func1()
echo "<hr>";
// 调用函数与系统函数重名时
var_dump(88);//hello,你调用的是我哦...88
echo "<hr>";
// 必须加上全局空间标识符'\',才能访问到系统内置的函数
\var_dump(100);//int(100)
echo "<hr>";
// 全局空间中访问类
\var_dump(\Test::APP);//string(9) "张福根"
echo "<hr>";
}
//全局空间
namespace {
class Test
{
const APP = '张福根';
}
}
二、命名空间的别名与导入
namespace cn\fugen;
class User{};
namespace thirteen;
// 1. 使用use导入命名空间,引入空间cn\chloe,成功引入命名空间以后,可以使用限定名称调用类元素
use cn\fugen;
$user = new fugen\User;
// 为空间起别名,使用别名代替命名空间
use cn\fugen as c;
$user = new c\User;
// 2. 使用use导入一个类,导入类以后就可以使用非限定名称度调用类元素
use cn\fugen\User;
$user = new User();
//为类起别名,使用别名代替类名
use cn\fugen\User as AAUser;
$new = new AAUser;
三. 实现类的自动加载功能
<?php
try {
spl_autoload_register(function($class_name){
$file = __DIR__ . DIRECTORY_SEPARATOR . $class_name . '.php' ;
if( !( is_file($file)&&file_exists($file) ) )
throw new \Exception('文件名不合法或者文件不存在');
require $file;
});
} catch (\Throwable $th) {
$th->getMessage();
}
//给类起别名,use extend\lib\Order as Order;
use extend\lib\Zhang;
use extend\lib\Fugen;
// 用别名访问类元素
echo Zhang::$name.'<br>';
echo '<hr>';
echo Fugen::$name.'<br>';
案例总结:
一. 在某个空间中访问类与访问函数有什么区别
- 1、在空间中访问类,不论是本空间中的类还是其他空间中的类元素,都不能省略空间
- 2.如果调用的函数与系统函数重名,与定义在全局空间中的自定义函数重名,优先调用当前空间中的函数,找不到时才会去全局查找
二、命名空间的别名与导入分别指:
- 1、使用use导入命名空间,引入空间cn\chloe,成功引入命名空间以后,可以使用限定名称调用类元素
- 2、使用use导入一个类,导入类以后就可以使用非限定名称度调用类元素
三. 实现类的自动加载功能:spl_autoload_register()
- spl_autoload_register ([ callable $autoload_function [, bool $throw = true [, bool $prepend = false ]]] ) : bool
- autoload_function 欲注册的自动装载函数。如果没有提供任何参数,则自动注册 autoload 的默认实现函数spl_autoload()。
- throw 此参数设置了 autoload_function 无法成功注册时, spl_autoload_register()是否抛出异常。
- prepend如果是 true,spl_autoload_register() 会添加函数到队列之首,而不是队列尾部。