2014-04-10 75 views
0

我徘徊为什么下面的代码给出了一个错误:致命错误,与命名空间在PHP

<?php 

namespace Notebook\Routers{ 

    function exploder($request_uri){ 
     $explode = explode("/", $request_uri); 
     return ["count"=> count($explode), "values"=>$explode]; 
    } 
} 

namespace{ 
use Notebook\Routers; 
exploder($_SERVER["REQUEST_URI"]); 
} 

它说Fatal error: Call to undefined function exploder() in /var/www/index.php on line 13

除非有我丢失的东西。 use Notebook\Routers应该能够在当前命名空间中导入该函数。

回答

1

看看文档中关于aliasing和调用你的函数是这样的:

Routers\exploder($_SERVER["REQUEST_URI"]); 
+0

那么,呃,那么使用use关键字的意义呢?我很困惑。 – iOi

0

“使用”关键字允许别名其他命名当前的命名空间内。这里你已经包含了一个全局命名空间和你想要使用的特定类,路由器。为了让您的代码工作,明确地叫出这个名字空间作为我在下面做,

namespace Notebook\Routers{ 

    function exploder($request_uri){ 
     $explode = explode("/", $request_uri); 
     return ["count"=> count($explode), "values"=>$explode]; 
    } 
} 

namespace Notebook\Routers{ 
    exploder($_SERVER["REQUEST_URI"]); 
} 

,或者您可以使用以前的答案的建议,并使用功能

Routers\exploder($_SERVER["REQUEST_URI"])"; 

当你使用'对命名空间Notebook \ Routers使用'命令,命名空间被隐式地命名为路由器。由于您没有在同一个文件中使用多个命名空间,我不相信使用'use'关键字是必要的。