php use限定名称,use导入命名空间|命名空间中:非限定名称,限定名称和完全限定名称...

/*

* 命名空间的声明与使用

* 1.使用关键字:namespace

* 2.php5.3+

* 3.namespace 之前不能有除了declare和注释之外的任何代码,html也不行

* 4.命名空间默认从全局开始定位,全局空间用\表示,类似于根目录

* 5.如果当前脚本声明了命名空间,则所有成员的访问,就必须使用命名空间,包括系统函数

*/

实例

/*

* 1.声名一个命名空间:test 下创建 demo1类 get() 函数

*/

namespace test;

class demo1{

function show()

{

return '这是test命名空间下demo1类的show方法';

}

const TEYP = 'PHP';

}

function get()

{

return  'test下面的get方法';

}

/*

* 2.一个脚本中创建多个命名空间:test1 下也创建 demo1类 get() 函数

*/

namespace test1;

class demo1{

function show()

{

return '这是test1命名空间下demo1类的show方法';

}

const TEYP = 'javascript';

}

function get()

{

return  'test1下面的get方法';

}

//默认输出当前空间的内容

echo '默认输出当前test1空间的show()方法'.(new demo1())->show().'
';

echo get(),'
';

//当前空间

echo '当前的命名空间:'. __NAMESPACE__.'
';

//也可以带上当前的命名空间来访问当前空间代码

$namespace = __NAMESPACE__.'\demo1';

echo (new $namespace)->show().'
';

//输出test空间下的的内容,带上\从根目录开始

// 专业术语:完全限定名称

echo \test1\get().'
';

echo demo1::TEYP,'


';

/*

* 3.跨空间访问代码:跨空间访问和跨目录访问文件是一样的,都要带上完整的空间路径

*/

echo \test\demo1::TEYP.'
';

echo \test\get().'
';

echo \test\demo1::class.'
';

echo (new \test\demo1())->show().'


';

echo namespace\get().'
';

/*

* 4.在命名空间的脚本中,如何访问系统预定的函数?

* 例如声明一个变量 $string;

*/

$string = '北京欢迎你!';

print_r($string);

\print_r($string);

echo '


';

//之前我们说过在空间里访问全局空间的代码要加\,这里没有加为什么可以?

//因为如果用户没有\,计算机首先会在本空间查找var_dump()函数,如果没有找到就会去全局空间查找,所以不报错;

//如果用户在当前空间也创建了一个var_dump()函数,则只会执行本空间定义的,不会执行系统预定义的

function print_r($string)

{

echo $string;

}

print_r('这是test1空间的print_r函数');

echo '


';

//事实上2个完成的调用语句应该这样写

\print_r($string);//系统预定义函数

echo '
';

\test1\print_r('test1空间的print_r函数');

运行实例 »

点击 "运行实例" 按钮查看在线实例

/*

* 如何让全局代码和用户自定义命名空间的代码和平共处

* 1.全局代码:之前我用/表示

* 2.用户代码:用namespace进行标识

* 3.用户自定义命名空间:空间标识符后又一对花括号,属于该空间的代码都放里面

* 4.全局空间代码:使用一个没有标识符namespace 关键字后面跟一对花括号即可,将代码放在这对没有标识符的括号里面

*

*/

实例

//声名一个命名空间test3

namespace test3{

class demo2

{

const HOST = '127.0.0.1';

}

function set()

{

return 'test3\set方法';

}

}

//如果当前脚本使用了命名空间,那么里面的代码必须使用命名空间进行声名和访问

// echo (new \test3\demo2())->name;//不能访问

//声名一个命名空间test4

namespace test4{

class demo2

{

const HOST = 'localhost';

public $name='php';

}

function set()

{

return 'test4\set方法';

}

//在test4空间如果访问test3空间的代码是不可以的

//echo (new \test3\demo2())->name;

echo (new demo2())->name.'
';

}

//全局命名空间

namespace {

//默认全局全局空间,不用加\

echo test3\demo2::HOST.'
';

echo test4\set().'
';

}

运行实例 »

点击 "运行实例" 按钮查看在线实例

/**

* 命名空间的分层管理

* 非限定名称:空间成员名称前不适用空间前缀,类似当前目录访问

*/

实例

namespace test;

class demo1{

function show()

{

return '这是test命名空间下demo1类的show方法';

}

const TEYP = 'PHP';

public $name='php';

}

function get()

{

return  'test下面的get方法';

}

//非限定名称:

echo get().'
';

//限定名称:类似相对路径 自动添加前缀test

echo '限定名称:'.(new test1\demo1)->name,'
';

//声名一个命名空间test1 为test的子类

namespace test\test1;

class demo1{

function show()

{

return '这是test命名空间下demo1类的show方法';

}

const TEYP = 'PHP';

public $name='php';

}

function get()

{

return  'test下面的get方法';

}

//完全限定名称:相当于绝对路径

echo (new \test\demo1())->show();

运行实例 »

点击 "运行实例" 按钮查看在线实例

/**

* 使用别名导入命名空间

* 使用关键字use

*/

实例

namespace test;

//别名导入子命名空间

use test\one\model as model;

//别名导入子命名空间下的类

use test\view\demo4 as demo;

class demo4{

public $name = 'php中文网';

const TYPE = 'string';

}

function add($a,$b)

{

return $a+$b;

}

echo 'test空间下的方法:'.add(20,30);

echo 'test\one\model空间下的类属性:'.(new model\demo4())->name.'
';

echo 'test\one\model空间下add方法:'.model\add(10,15).'
';

echo 'test\view空间下类的常量:'.demo::TYPE;

//声名一个子命名空间

namespace test\one\model;

class demo4{

public $name = 'mysql';

const TYPE = 'int';

}

function add($a,$b)

{

return $a*$b;

}

namespace test\view;

class demo4{

public $name = 'javascript';

const TYPE = 'varchar';

}

function add($a,$b)

{

return $a/$b;

}

运行实例 »

点击 "运行实例" 按钮查看在线实例

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值