2013-03-28 48 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