2013-03-28 72 views
0

我想爲我的Symfony 2應用程序(跨多個控制器和實體)提供一組全局函數,這些函數的作用就像構建在PHP函數中一樣。例如:Symfony 2全局函數

function startsWith($haystack, $needle) { 
    return !strncmp($haystack, $needle, strlen($needle)); 
} 

我可以創建一個含有這些功能的文件,但它需要複製每個命名空間:

namespace Taggle\TaggleBundle\DependencyInjection; 
namespace Taggle\TaggleBundle\Controller; 

什麼是處理這個最好的方法是什麼?

+1

爲什麼需要對不同的命名空間進行復制?只要在全球範圍內宣佈它們?爲什麼不使用靜態方法將它們定義爲類? – Gerry

+0

我不知道如何在全局命名空間中聲明它們。這就是問題所在。 – CaptainStiggz

回答

0

如果包含您的函數聲明的文件沒有定義一個名稱空間,那麼您的函數將在全局名稱空間中聲明。

全局名稱空間中的函數可以通過其常規名稱在任何其他名稱空間內調用。

的functions.php

<?php 

function foo() { 
    echo 'bar'; 
} 

的index.php

<?php 

namespace Foo\Bar; 

require 'functions.php'; 

foo(); // 'bar' 

不過,我會建議不要定義普通函數的這種方式。首先,它們會污染全局名稱空間(導致潛在的命名衝突),其次,用靜態方法聲明一個類會更好。這樣你也可以從自動加載機制中受益。

+0

謝謝!如果問題不是太多,你能否指點我使用Symfony2自動加載機制的一些示例文檔? – CaptainStiggz