Doctrine cli-config.phpファイルのような小さな設定ファイルがある場合、このファイルが別の場所に含まれているときにグローバル変数としてリークしたくないいくつかの一時変数を使用する必要があることがよくあります。
たとえば、次の構成ファイルでは、それを含むコードのコンテキストでリークします$container
。$em
$container = Bootstrap::createDependencyInjectionContainer();
$em = $container->get('Doctrine\ORM\EntityManager');
return new \Symfony\Component\Console\Helper\HelperSet(array(
'db' => new Helper\ConnectionHelper($em->getConnection()),
'em' => new Helper\EntityManagerHelper($em)
));
Javascript では、次の構成を使用してコードのブロックを分離できました。
(function() {
})();
しかし PHP では、無名関数が存在しても、上記の構造は機能しません。
解析エラー: 構文エラー、予期しない '(' が ...
したがって、一時変数がグローバルにならないように保護する唯一の方法は、コードを名前付き関数でラップすることです。
function create_my_config() {
// wrap the cli-config.php code above
}
return create_my_config();
しかし、これはグローバル関数名をリークします。確かに、名前空間を付けることはできますが、これがはるかに優れているかどうかはわかりません。
名前付き関数を作成せずに、コードのブロックとそのすべての変数を分離する方法はありますか?