命名空间

<?php



namespace cart;

function getCart()
{
	echo "coke\n";
}

cart.php

<?php


namespace user;


function getName()
{
	echo "jun\n";
}

user.php

<?php

//命名空间
// 文件都引用到这个文件中,模拟单入口登录
// 之后看看命名空间如何调用函数方法或者对象的
// index.php   user.php  cart.php
// namespace 必须在文件开始的时候就声明,而且不用引号
// 如果申明了文件的命名空间,那么下次调用的时候必须声明文件所在的命名空间(包)才能调用
namespace index;
include("user.php");
include("cart.php");


//namespace user;
getName();
//Fatal error: Call to undefined function index\getName() in D:\code\demo\index.php on line 14


namespace user;
getName();
//jun

namespace cart;
getCart();
//coke
<?php
	
	namespace usr\foo;
	echo __NAMESPACE__;// usr\foo;


######################################################

cart.php

<?php

namespace cart;

class Cart
{
	function __construct()
	{
		echo "coke\n";
	}
}

user.php

<?php

namespace user;

class User
{
	function __construct()
	{
		echo "jun\n";
	}
}

index.php

<?php
// use 来声明命名空间的别名
include("cart.php");
$c = new cart\Cart();
// coke

include("user.php");
$u = new \user\User();//以反斜杠开始的是绝对命名空间,
//从根命名空间开始搜索,而不是当前命名空间
// jun

use \user as u;
//使用别名来简化书写,如果没有as 那么默认别名是最后一个斜杠后面的名字
$u = new u\User();

调用方式

1,namespace Name; 对象名

2 , Name+ 反斜杠+对象名

当前命名空间名

    __NAMESPACE__

使用别名

    use alias\use as use 或者 alias\use 不用as时默认 use 为别名 

从根命名空间开始查找匹配(树根则是无名的全局命名空间

    反斜杠+名字        \use\foo

反过来想想,是否对任何的php代码都能使用命名空间,

回去查手册:虽然任意合法的PHP代码都可以包含在命名空间中,但只有三种类型的代码受命名空间的影响,它们是:类,函数和常量。

我们只能用命名空间操作类,函数,和常量

什么叫命名空间?

命名空间是对作用域的一种特殊的抽象,它包含了处于该作用域内的标识符,且本身也用一个标识符来表示,这样便将一系列在逻辑上相关的标识符用一个标识符组织了起来。

(当然很多时候我们使用的生产环境还没有到5.3或者由于其他原因没有使用命名空间,那么也可以使用PEAR包的命名规则)


你可能感兴趣的:(命名空间)