<?php
/*
命名空间解决了函数的全局命名冲突问题
如果代码使用了命名空间,那么所有代码必须写到命名空间中
*/
namespace a
{
function hello()
{
return '命名空间是'.__NAMESPACE__.'<br>函数名称是:'.__FUNCTION__;
}
}
namespace b
{
function hello()
{
// return \a\hello(); //不同空间之间的函数调用,需要写完整的命名空间名称
return '命名空间是'.__NAMESPACE__.'<br>函数名称是:'.__FUNCTION__;
}
}
namespace
{
// echo \a\hello();
echo a\hello(); //调用a空间中的函数hello
echo '<hr>';
echo \b\hello(); //调用b空间中的函数hello
}
----------------------------------------------------------------------------------------------------
<?php
//命名空间解决了类的全局命名冲突问题
namespace a
{
class A
{
public $name = '朱老师';
public function say()
{
$namespace = '命名空间:'.__NAMESPACE__;
$className = '类名:'.__CLASS__;
$methodName = '方法名:'.__METHOD__;
return $namespace.'<br>'.$className.'<br>'.$methodName.'<br>'.$this->name;
}
}
}
namespace b
{
class A
{
public $name = 'peter zhu';
public function say()
{
$namespace = '命名空间:'.__NAMESPACE__;
$className = '类名:'.__CLASS__;
$methodName = '方法名:'.__METHOD__;
$temp = (new \a\A)->name; //不同空间之间的类的访问
return $namespace.'<br>'.$className.'<br>'.$methodName.'<br>'. $temp;
}
}
}
namespace //全局空间,默认为用反斜线表示 \
{
echo (new a\A)->say();
echo '<hr>';
echo (new b\A)->say();
}
----------------------------------------------------------------------------------------------------
<?php
namespace a
{
// const SITE_NAME = 'PHP中文网';
define('SITE_NAME', 'PHP中文网'); //define创建的常量,不受命名空间限制
}
namespace b
{
const SITE_NAME = 'www.php.cn';
}
namespace
{
// echo a\SITE_NAME;
echo SITE_NAME;
echo '<hr>';
echo b\SITE_NAME;
}
----------------------------------------------------------------------------------------------------
<?php
namespace a
{
$title = '<span style="color:red">PHP中文网</span>';
echo '当前空间的变量:'.$title; //本空间访问
echo '<hr>';
const CITY = '合肥';
}
namespace b
{
// echo '访问另一个空间中的变量'.\a\$title;
echo '访问另一个空间中的变量'.$title;
}
namespace
{
echo '<hr>';
echo '全局空间中访问另一空间中的变量'.$title;
echo '<hr>';
echo a\CITY;
}
----------------------------------------------------------------------------------------------------
<?php
/*
将命名空间进行分级管理,可以使不同空间的代码之间的逻辑关系更加的清晰
将有一定层级关系的命名空间的标识符之间用反斜线进行分隔 \
*/
namespace father
{
const SITE_NAME = 'PHP中文网';
}
namespace father\sub
{
const DOMAIN = 'www.php.cn';
}
namespace
{
echo father\SITE_NAME.'的域名是:'.father\sub\DOMAIN;
}
----------------------------------------------------------------------------------------------------
<?php
/*
命名空间的导入,本质上就是用一个别名,来简化一个比较长的多级空间名称
导入主要针对类,php5.6以后,也支持常量和函数的导入
导入空间默认名称主要用use, 空间别名的简化用as
*/
namespace app\index\controller;
const CITY = '合肥';
function say()
{
return '大湖名城,创建高地';
}
class User
{
public function hello()
{
return 'PHP是一门快速开发Web应用的脚本语言';
}
}
namespace my;
//不用use来简化空间名称
echo \app\index\controller\CITY.'<br>';
echo \app\index\controller\say().'<br>';
$user =new \app\index\controller\User;
echo $user -> hello();
echo '<hr>';
//用use来导入一个命名空间,并起个简短的名称
use const app\index\controller\CITY;
use function app\index\controller\say;
use app\index\controller\User;
echo CITY.'<br>';
echo say().'<br>';
$user =new User;
echo $user -> hello();
echo '<hr>';
//用as来进一步简化空间的名称
use const app\index\controller\CITY as C;
use function app\index\controller\say as s;
use app\index\controller\User as U;
echo C.'<br>';
echo s().'<br>';
$user =new U;
echo $user -> hello();
echo '<hr>';
----------------------------------------------------------------------------------------------------
<?php
namespace demo;
$name = 'peter zhu';
$obj = new \stdClass;
function strtoupper($str) //可以创建与全局重名的函数
{
return \strtoupper($str); //访问全局系统函数必须加全局空间标识\
}
echo strtoupper($name);
----------------------------------------------------------------------------------------------------
<?php
namespace app\admin;
const SITE_NAME = 'PHP中文网';
function getDomain()
{
return 'www.php.cn';
}
class Demo
{
public static function hello()
{
return '祝贺党的十九大胜利召开';
}
}
//1.非限定名称:省略空间名称,使用默认或当前的命名空间
echo SITE_NAME.'<br>';
echo getDomain().'<br>';
echo Demo::hello().'<hr>';
//2.限定名称:前面必须添加命名空间才可以访问, 通常用于子空间
namespace app\admin\user;
const SITE_NAME = '厉害了,我的国';
function getDomain()
{
return '支持中央大力反腐';
}
class Demo
{
public static function hello()
{
return '不忘初心';
}
}
namespace app\admin;
echo user\SITE_NAME.'<br>';
echo user\getDomain().'<br>';
echo user\Demo::hello().'<hr>';
//3.完全限定名称:从全局空间的反斜线开始\
echo \app\admin\SITE_NAME.'<br>';
echo \app\admin\getDomain().'<br>';
echo \app\admin\Demo::hello().'<hr>';
echo \app\admin\user\SITE_NAME.'<br>';
echo \app\admin\user\getDomain().'<br>';
echo \app\admin\user\Demo::hello().'<hr>';