参考资料:
 
概要:
1. 声明了命名空间之后,下面的const, function, class都会划归到该命名空间。
2. 只有声明过命名空间的PHP 文件才能加载有命名空间的PHP文件。
3. PHP 5.3 及以上才能使用命名空间
 
 
名词:
    关键字:namespace 用来声明 本PHP文件的命名空间
    常量:__NAMESPACE__ 用来返回当前命名空间的名称 默认为空字符串
    操作符: use 默认以最后一个\后的字符串为别名,配合 as 则为 as后的字符串,与MySQL的字段别名一致。
 
实际操作如下:
在apache目录下建立如下文件:index.php,Order.php,User.php
 
 
Order.php 的内容为
 

 <?php
/**
* @Author: Martin
* @Support: Martin
* @Last Modified by: Martin
*/
namespace Order; const STR = 'order list<br />'; function detail()
{
return 'order detail<br />';
}
function call_by_self()
{
return 'call by self<br />';
}
/**
*
*/
class Orderlist
{ public function __construct()
{
echo 'Class NameSpace is "', __NAMESPACE__, '"';
}
public function show_list()
{
for ($i = 0; $i < 5; $i++) {
echo "<ul><li>this is order$i<br />";
//内部直接访问
echo detail();
echo "</li></ul>";
}
}
}
//内部通过命名空间访问
echo \Order\call_by_self();

index.php 内容为:

 <?php
/**
* @Author: Martin
* @Support: Martin
* @Last Modified by: Martin
*/
namespace index;
include_once('Order.php'); //外部访问class 实例化即可使用
use Order\Orderlist;
$orderlist = new orderlist;
$orderlist->show_list(); //外部访问静态变量和function 直接访问
use Order;
echo Order\STR;
echo Order\detail();

打印结果为:

以上内容包含了:通过命名空间来访问文件和直接实例化访问,以及本空间直接访问。
命名空间的存在是为了防止两个同名的class都被载入,使用命名空间在加载第三方的类时能避免同名冲突。
 
下面来说一下自动加载
 
SPL 的全称是:Standard PHP Library PHP标准库,在PHP5以后已经内置在PHP中,无需另外安装。
SPL包含了一套针对数据结构、迭代器、异常、文件处理等的函数库。
 
自动装载库有以下函数
spl_autoload_call:尝试调用所有已注册的__autoload()函数来装载请求类

User.php 内容为:

 namespace User;
//直接载入Order
#include('Order.php');
//自动载入
spl_autoload_register(function($className) {
var_dump($className);
});
spl_autoload_call('Order');

打印结果为:

SPL自动载入函数包含如下:

spl_autoload_extensions: 注册并返回spl_autoload函数使用的默认文件扩展名。
get_include_path: 设置默认引用的文件夹
spl_autoload_register: 自动引入文件
 
实际操作如下:
我们重新调整目录结构和并复制order 到 lib下面 如下:

修改User.php 如下:

 namespace User;

 //直接载入Order
#include('Order.php');
//自动载入
define('LIB_DIR', __DIR__ . DIRECTORY_SEPARATOR . 'lib' . DIRECTORY_SEPARATOR);
spl_autoload_register(function ($class) {
$path = LIB_DIR . $class . '.lib.php';
include ($path);
}); spl_autoload_call('Order');
use Order; $orderList = new \Order\Orderlist();
$orderList->show_list();

打印结果为:

注意:
当采用SPL载入文件时,use并不能触发spl_autoload_register函数,他会被new触发,这样就会提示找不到文件,
所有采用spl_autoload_call 来提前触发自动载入。
 
 
 
 
 

最新文章

  1. Centos7 升级内核和应用TCP BBR 算法
  2. PHP函数、数组
  3. PowerDesigner16 基本使用教程
  4. OneProxy安全策略
  5. 清北学堂2017NOIP冬令营入学测试P4745 B’s problem(b)
  6. 第二章 DateTime工具类
  7. jQuery form插件的使用--用 formData 参数校验表单,验证后提交(简单验证).
  8. 消费者端的Spring JMS 连接ActiveMQ接收生产者Oozie Server发送的Oozie作业执行结果
  9. 【Netty学习】Netty 4.0.x版本和Flex 4.6配合
  10. 20-语言入门-20-Financial Management
  11. js模仿jquery里的几个方法next, pre, nextAll, preAll
  12. PHP的抽象类和接口
  13. UML软件方法大纲
  14. dfs学习总结
  15. H5键盘事件处理
  16. [android] 表格布局和绝对布局
  17. Win10系列:UWP界面布局进阶8
  18. maven中添加jetty运行插件
  19. Python 名称空间和作用域
  20. Hbase和Hive的异同

热门文章

  1. Linux网络编程——原始套接字能干什么?
  2. 前端,Java,产品经理,微信小程序,Python等资源合集大放送
  3. 改变事件绑定的this的问题
  4. QT5.5.1 为Qtcreator 编译的程序添加管理员权限
  5. delphi 中的函数指针 回调函数(传递函数指针,以及它需要的函数参数)
  6. 经典书单 —— 语言/算法/机器学习/深度学习/AI/CV/PGM
  7. Maven软件项目管理工具
  8. java学习笔记(9)——网络
  9. 【转】mybatis 一对一与一对多collection和association的使用
  10. PL/SQL 异常处理程序