要求php5.3以上

<?php
namespace test;
// 命名空间与目录类似功能,也可定义子命名空间,用分层的方式定义:
/*
namespace mydir\ok\project;

在声明命名空间之前唯一合法的代码是用于定义源文件编码方式的 declare 语句。另外,所有非 PHP 代码包括空白符都不能出现在命名空间的声明之前:
*/
const OK = 100;
class tclass {

}
function tfunction()
{

}

// 类,函数,常量受命名空间影响,必须在所有代码之前声明命名空间
// 可以在同一个文件中定义多个命名空间(不建议),有两种方式,第一种[不推荐]:
<?php
namespace myproject;
const CONN = 1;
class myclass {}
function myfunction(){}

namespace AntherProject;
const CONN_2 = 100;
class Myclass2{}
function myfunction2(){}
?>
<?php
// 第二种定义多个命名空间,大括号方法
namespace MyProject{
  const CONN = 1;
  class myclass{}
  function myfunction(){}
}

namespace AnotherProject{
  const CONN = 2;
  class myclass2{}
  class myfunction(){}
}
?>

<?php
// 将全局的非命名空间中的代码与命名空间中的代码组合在一起,只能使用大括号形式的语法。全局代码必须用一个不带名称的 namespace 语句加上大括号括起来,例如:
namespace MyProject{
  const CON = 1;
  class MyClas{}
  function myfunction(){}
}
// 以下为全局代码
namespace{
  session_start();
  $a = MyProject\myfunction();
  echo MyProject\Connect::start();
}
?>
//定义多个命名空间和不包含在命名空间的代码
<?php
declare(encoding="UTF-8");
namespace MyProject{
   const CONN = 1;
   class myclass{}
   function myfunction(){}
}
//以下全局代码
namespace {
  session_start();
  $a = MyProject\myfunction();
  echo MyProject\Connect::start();
}
?>

使用示例:

fuck.php文件:

namespace Foo\Bar\subnamespace;
const FOO = 1;
function foo(){
 echo 'this is fuck foo\bar\subnamespace';
}
class foo
{
  static function staticmethod()
    {
        echo 'this fuck staticmethod';
    }
}

test.php文件

<?php
namespace Foo\Bar;
include('fuck.php');
const FOO = 2;
function foo()
{
    echo 'this lin.php foo functions';
}

class foo
{
    static function staticmethod()
    {
        echo 'this lin static method';
    }
}
===============
命名空间的元素使用:
三种引用方式
1。非限定名称,或不包含前缀的类名称,as:
$a = new foo();
foo::staticmethod();
如果当前的命名空间为 currentnamespace,foo将被解析为 currentnamespace\foo
如果使用 foo 的代码是全局的,不包含在任何命名空间中的代码,则foo会被解析为 foo.如果命名空间中的函数和常量没有定义,则该非限定的函数名称或常量名称会被解析为全局函数名称或常量名称。
as:
foo(); // this lin.phph foo functions;
echo "<br />";
foo::staticmethod(); // this lin static method
echo "<br />";
echo FOO;  // 2
================
2.限定名称,或包含前缘的名称。如
$a = new subnamespace\foo();或者  subnamespace\foo::staticmethod();
如果当前的命名空间是 currentnamespace,则 foo会被解析为
subnamespace\foo::staticmethod();
as:
subnamespace\foo(); //this is fuck foo\bar\subnamespace
echo "<br />";
subnamespace\foo::staticmethod(); //this fuck staticmethod
echo "<br />";
echo subnamespace\FOO; // 1
=================
3。完全限定名称或者包含了全局前缀操作符的名称;
$a = new \currentnamespace\foo();
或 \currentnamespace\foo::staticmethod();
访问任意全局类,函数,或常量,都可以使用完全限定名称,如: \strlen()...

namespace\Foo这个也是完全限定名称

\Foo\Bar\foo(); // this lin.php foo functions
echo "<br />";
\Foo\Bar\foo::staticmethod(); // this lin static method
echo "<br />";
echo \strlen('xxxxxx'); // 6 访问任意全局类,函数,或常量,都可以使用完全限定名称
echo "<br />";
\Foo\Bar\subnamespace\foo(); // this fuck staticmethod

===================

别名/导入

fuck.php
namespace My\nS;
class ok
{
    public function __construct()
    {
        echo "this My\Ns";
    }
    public function test()
    {
        echo "this is test method";
    }
}

-------------

<?php
//使用 namespace方法
/*
使用命名空间:别名/导入
有两种方式使用别名或导入方式:为类名使用别名,或为命名空间名称使用别名,PHP不支持导入函数或常量。
对命名空间中的名称(包含命名空间分隔符的完全限定名称如 Foo\Bar以及相对的不包含命名空间分隔符的全局名称如 FooBar)来说,前导的反斜杠是不必要的也不允许有反斜杠,因为导入的名称必须是完全限定的,不会根据当前的命名空间作相对解析。
*/
include 'fuck.php';
/*
完全引用
$ff = new My\nS\ok();
echo "<br />";
$ff->test();
*/

/*
部分引用
use My\nS;
$ff = new nS\ok();
echo "<br />";
$ff->test();
*/
//别名引用,可引入多个
use My\nS\ok as tt, My\Good\Yes;
$ff = new tt();
echo "<br />";
$ff->test();

---------------------

使用命名空间:后备全局函数/常量
在一个命名空间中,当 PHP 遇到一个非限定的类、函数或常量名称时,它使用不同的优先策略来解析该名称。类名称总是解析到当前命名空间中的名称。因此在访问系统内部或不包含在命名空间中的类名称时,必须使用完全限定名称,

\strlen($str);

namespace A\B\C;
class exception extends \Exception{}

对于函数和常量来说,如果当前命名空间中不存在该函数或常量,PHP 会退而使用全局空间中的函数或常量

全局空间
如果没有定义任何命名空间,所有的类与函数的定义都是在全局空间,与 PHP 引入命名空间概念前一样。在名称前加上前缀 \ 表示该名称是全局空间中的名称,即使该名称位于其它的命名空间中时也是如此。

php 命名空间(要求php5.3以上)的更多相关文章

  1. php5.3 PHP5.4 PHP5.5 新特性/使用PHP5.5要注意的

      1.PHP 5.3中的新特性 1.1 PHP 5.3中的新特性 1.1.1. 支持命名空间 (Namespace) 毫无疑问,命名空间是PHP5.3所带来的最重要的新特性. 在PHP5.3中,则只 ...

  2. PHP5.3新特性

    1.首先对之前滥用的语法进行了规范 众所周知PHP在语言开发过程中有一个很好的容错性,导致在数组或全局变量中包含字符串不使用引号是可以不报错的,很多业余的开发者因为懒惰而产生的安全问题十分严重,之所以 ...

  3. PHP5.3、PHP5.4、PHP5.5、PHP5.6的新特性

    1. PHP5.3中的新特性 1.1 支持命名空间(namespace) 毫无疑问,命名空间是PHP5.3所带来的最重要的新特性. 在PHP5.3中,可以用命名空间防止代码的冲突,命名空间的分隔符为 ...

  4. ThinkPHP3(命名空间、RBAC)

    命名空间 当开发大型项目的时候,可以会需要成千上万的文件 面向对象通过命名空间来解决这个问题的. PHP命名空间是PHP5.3以后才出现的. 命名空间中可以出现:类,函数,常量 只有const定义的常 ...

  5. PHP 5.5 新特性

    文章转自:http://wulijun.github.io/2013/07/17/whats-new-in-php-5-5.html http://www.cnblogs.com/yjf512/p/3 ...

  6. ThinkPHP框架二

    ThinkPHP笔记二 1.1 TP框架的配置文件 在TP框架中,所有的配置文件都是自动加载的,加载的顺序:惯例配置<应用配置<调试配置<模块配置<动态配置 1. 惯例配置(T ...

  7. 小谈ThinkPHP

    ThinkPHP也是一个MVC框架,分视图.控制器和模型,和Yii框架相比相对较好理解,并且是轻量级的框架(相对于Yii来说),在使用Yii框架时候如果将框架放在项目文件中,用编辑器打开文件都比较慢, ...

  8. 1 PHP 5.3中的新特性

    1 PHP 5.3中的新特性 1.1 支持命名空间 (Namespace) 毫无疑问,命名空间是PHP5.3所带来的最重要的新特性. 在PHP5.3中,则只需要指定不同的命名空间即可,命名空间的分隔符 ...

  9. PHP 5.3 新特性

    1 PHP 5.3中的新特性 1.1 支持命名空间 (Namespace) 毫无疑问,命名空间是PHP5.3所带来的最重要的新特性. 在PHP5.3中,则只需要指定不同的命名空间即可,命名空间的分隔符 ...

随机推荐

  1. 主流数据库字段类型转.Net类型的方法

    最近在阅读一些开源的代码,发现其中有些方法总结的很全面,至少在我做同样的事情时候,需要抓破脑袋想活着google,现在看到了这个关于主流数据库字段类型转.Net类型的方法,故收藏之,也顺便分享给那些能 ...

  2. node.js在windows下的学习笔记(7)---express的app.js的详细配置说明

    var express = require('express'); var path = require('path'); var favicon = require('serve-favicon') ...

  3. Eclipse 开发WEB项目所遇问题 WebContent WebRoot

    原文:http://blog.sina.com.cn/s/blog_525960510100jo0j.html 最近在做Web 项目时,新建了一个WEB 项目,如webdemo,eclipse默认的b ...

  4. Mac Pro更换SSD后,在Win7下启用ACHI的方法AHCI

    在Mac Pro下更换SSD后,如果安装Win7,要将SSD改为AHCI模式是非常麻烦的.本文介绍如何将Mac的Win7下的SSD改为AHCI方式驱动,及几种常见问题的处理. 一.当Lion与Win7 ...

  5. 飘逸的python - 使用dis模块进行代码层次的性能剖析

    http://blog.csdn.net/handsomekang/article/details/41479597?utm_source=tuicool&utm_medium=referra ...

  6. php实用函数整理

    1. 排序:array_multisort 可以对多位数组的多个字段进行排序 例子1如下: //自定义数组排序--按转发数从高到低排序 function sortSelfRc($oneLayer){ ...

  7. 数据库通用Jdbc操作

    public class JdbcUtil { /** * 关闭一个数据库链接 * @param conn */ public static void closeConnection(Connecti ...

  8. 绿荫工作室爱选修app内测

    下载地址:http://greendasungta.com/greencms/ixuanxiu.apk 开发目的是用于方便在校生的选课操作以及对选修课的交流.

  9. mysql数据库常用语句2

    关于mysql常用语句的整理,上一篇涉及到ddl.dml以及一些简单的查询语句. 1:mysql分页查询 select * from table_name limit 5,10;   从下标为5元素查 ...

  10. Failed to create java virtue machine(不能创建java虚拟机)

    今天开发模块时,遇到这个问题,本来是版本的问题,jdk1.6的版本有点低,与cxf框架不兼容,需要用到jdk1.7,结果安装了jdk1.7之后,客户方要求必须用jdk1.6,要统一,所以卸载jdk1. ...