2012-04-19 28 views
5

有沒有辦法讓PHP的命名空間允許在命名空間內調用函數,就好像它們是全局的一樣?PHP的全球名字空間

實施例:

handle() 

不是:

prggmr\handle() 

這是我的示例代碼:

<?php 
require_once 'prggmr/src/prggmr.php'; 

prggmr\handle(function() { 
    echo 'This is a test scenario'; 
}, 'test'); 

prggmr\signal('test'); 

別名不適用於功能工作:

<?php 
require 'prggmr/src/prggmr.php'; 
use prggmr\handle; 

handle(function(){ 
    echo "Test"; 
}, "test"); 

結果:

Fatal error: Call to undefined function handle() 

回答

2

不爲一個整體的命名空間,沒有。不過,對於單個的名字,你可以做

use p\handle; 

aliasesp\handle只是handle

+0

嗨,謝謝我試過這個。事情是,主文件是命名空間:prggmr,這是給我一個未定義:---- <?php使用prggmr作爲p; 使用p \ handle作爲句柄; handle(function(){echo 1;},'hey'); signal('hey'); ---我也嘗試過\作爲一個全球性的處理,但沒有任何意義。 – JREAM 2012-04-19 16:56:13

0

想我會添加一個答案現代PHP作爲我最近了解到:

之前PHP 5.6既不是功能還是常量可以通過進口使用聲明。 從PHP 5.6開始,允許使用別名或導入函數和常量名稱。

所以你的第二個代碼示例應該在這幾天工作得很好。

另外值得一提的是,您可以爲PHP命名空間定義一個塊範圍,though it's discouraged。所以這將工作:

<?php 
require_once 'prggmr/src/prggmr.php'; 

namespace prggmr { 
    handle(function() { 
     echo 'This is a test scenario'; 
    }, 'test'); 

    signal('test'); 
}