joken-前端工程师

  :: 首页 :: 博问 :: 闪存 :: 新随笔 :: :: :: 管理 ::

1.file1.php:

<?php
    namespace foos;
    class demo{
        function testfn(){
            echo "sdlkfjskdjf";
        }
    }
?>

2.main.php:

<?php
    include './file1.php';
    $getcls=new foos\demo;
    $getcls->testfn(); //这里可以正常打印出来正常执行,说明namespace是一个顶层的层次命名
?>

或者你也可以这样写:

<?php
    include './file1.php';
    use foos/demo; //使用这个namespace
    $getcls=new demo;
    $getcls->testfn();
?>

使用namespace use的调用需要引入其他文件才可以调用其他文件的东西,才可以use其他文件的东西,否则无效。

以前没有namespace的时候直接引入文件然后直接调用,现在php有了namespace的主要目的是更好的区别模块,避免重命名冲突的现象,而不是为了实现模块的调用,调用还是include或require这些,namespace 和use主要还是为了建立命名上的层次关系,避免命名空间上的冲突。

use 某个namesp 和 直接 \namespace\cls 是一样的功能,所以我们可以看出namespace主要是为了区别层次关系,更好的定义文件的空间命名避免不必要的命名冲突。

 

3.use 使用的注意问题:

<?php
    require './file1.php';
    require './file2.php';
    use filetwo\demo, //这里会报错,因为use了通用的类名,所以会报错,因为你在这个文件中使用demo的话,会有冲突,代码执行会不知道是哪个demo要调用
        fileone\demo;
    $getcls=new demo;
    $getcls->testfn();
?>

正确的写法是这样:

<?php
    require './file1.php';
    require './file2.php';
    use filetwo\demo as test, //重命名调用的模块,这样就不会在调用demo的时候冲突了
        fileone\demo;
    $getcls=new demo;
    $getcls->testfn();
?>

namespace务必不要一样,但是你可以namespace下的东西可以和其他namespace下的东西一样,比如上面的demo在不同的namespace之下,但是他们是没有冲突的,就算你在同一个地方调用他们,他们也是不会有冲突,冲突的是调用方法的不当,比如第一种的调用方法会导致报错,第二种你重命名了其中一个,这样在通用文件中调用就可以区别开了,这样就不会报错了。

posted on 2017-06-17 21:46  joken1310  阅读(363)  评论(0编辑  收藏  举报