php命名空间
来源:互联网 发布:淘宝网平板电脑价格 编辑:程序博客网 时间:2024/06/06 08:50
php命名空间
一、命名空间概述
命名空间其实就是一个虚拟目录的概念,用于区分不同的 类、常量、函数,每次php运行时,会将include进来的文件按所定义的命名空间 分别放在不同的虚拟目录中,如果需要使用,则需要按目录去加载。
需要注意的是命名空间和文件 include的路径是完全不一样的,文件实体路径是需要include进来的,一旦include进来,则执行到的时候就会按照谇文件的namespace定义 去加载命名空间
命名空间是独立于实体目录的一个虚拟目录,完全按文件开头的定义来。
二、命名空间定义
namespace MyProject;const CONNECT_OK = 1;class Connection { /* ... */ }function connect() { /* ... */ }
则下面的都会有命名空间MyProject中
如果没有定义namespace,则默认是在全局命名空间 / 之下。
三、命名空间的使用
在有了命名空间之后,有三种引用方式
1、相对类名new foo() 这种属于相对路径,会去找当前命名空间下的foo类
2、相对类名new test/foo();这种类名会去找当前命名空间下的test/foo()类
3、绝对类名/test/foo();这种/是全局命名空间下的类名
和*unix目录是一个概念
而每一种也称为非限定名称(没有命名空间指定),每二种是限定名称(指定了但不是全局),每三种是完全限定名称(绝对路径直接指定)
注意: 后备全局函数/常量
对于类、函数、常量,在使用非限定名称(也就是没有加命名空间指定)时,会有不同的优先策略来解析该名称。
如果是类,则会找当前命名空间下的类,如果没有,则会报错。
而函数和常量,如果当前命名空间下没有,则会使用全局命名空间下的。
在thinkphp中,可以解释这个问题:
namespace Home\Controller;require THINK_PATH.'/test/test.php';//use Think\Controller;class IndexController extends \Think\Controller { public function index(){ echo 1; $c = C('COOKIE_PATH'); test(); $a = new \test(); }}
如我创建了test.php文件,里面定义了test()函数和test类,没有定义命名空间,则默认在全局命名空间下,引入了这个文件,在执行时,test()函数的使用是非限定名称的,当前命名空间Home\Controller并没有这个函数,则会去全局命名空间找,就可以找到。
而test()类的使用必须加上\来限定命名空间,因为对于类,如果没有加命名空间,则只会找当前命名空间下,如果没有则会报错。
就像Controller这个类必须要指定命名空间,而在function.php中定义的一些函数不需要命名空间是一个道理。
具体可以看php手册
http://php.net/manual/zh/language.namespaces.rationale.php
- PHP手册-命名空间
- PHP手册-命名空间
- PHP的命名空间
- php命名空间 namespace
- PHP的命名空间
- php 命名空间
- PHP命名空间
- php 命名空间1
- php命名空间2
- PHP中的命名空间
- php 命名空间
- PHP 命名空间 入门
- PHP命名空间
- php命名空间
- PHP中的命名空间
- php namespace-命名空间
- PHP中的命名空间
- PHP的命名空间
- App UI设计:“看得见”有多重要
- iOS开发UI篇—UITableview控件基本使用
- 关于String对象不可变的问题分析
- iOS 中 Block实现UIAlertView
- Intersection of Two Linked Lists
- php命名空间
- 双色球
- 中介者模式
- C++ STL,ATL,WTL之间的联系和区别
- HD1002 A + B Problem II(大数简单的加法)
- ZOJ 1001 A + B Problem
- Web学习篇之---html基础知识(一)
- 硬件虚拟化技术浅析
- 九度oj 1108