欢迎光临
我们一直在努力

PHP设计模式-命名空间

早起PHP是没有命名空间的,随着工程项目越来越大,代码文件越来越多,组件化引入文件时代码容易冲突,于是PHP5.3开始加入命名空间。

无命名空间例子:

test1.php文件代码
<?php


function test(){
    var_dump('test1');
}
test2.php文件代码
<?php

function test(){
    var_dump('test2');
}
demo.php
<?php

include_once 'test1.php';
include_once 'test2.php';

这时执行demo.php 将会报错。

PHP Fatal error: Cannot redeclare test() (previously declared in D:\wwwroot\dev\public\test\test1.php:5) in D:\wwwroot\dev\public\test\test2.php on line 5
Fatal error: Cannot redeclare test() (previously declared in D:\wwwroot\dev\public\test\test1.php:5) in D:\wwwroot\dev\public\test\test2.php on line 5

 

命名空间的声明

namespace 名称

PHP规定命名空间必须写在代码之前,例子如下

test1.php文件代码

<?php
namespace test1;
function test(){
    var_dump('test1');
}

这个时候同时引用就不会出现错误了。

当然,如果你只是test1.php增加了命名空间,你会发现在demo.php中调用test()的时候是调用的test2的。test1的无法调用,就算颠倒方向也是如此。

此事如果test1声明了命名空间,调用方式如下:

<?php

include_once 'test1.php';
include_once 'test2.php';

test1\test();

注意:如果demo也申明了命名空间test1,那么调用的时候就和原来一样,直接调用test()即可,只有跨命名空间调用的时候才要加上命名空间的名称。

 

分享到:更多 ()