如何在不评估或扩展魔法常量__DIR__的情况下编写或打开php数组

时间:2012-10-08 03:59:12

标签: php string magic-constants

我有一个配置文件,它是一个名为config.php的php数组。

return array(
    'template_dir' => __DIR__ '/configs/templates.php'
)

然后每当我想使用这个配置文件时,我都会包含config.php。以这种方式编写配置文件也很容易。

file_put_contents($config, 'return ' . var_export($data, true));

但我希望能够将魔术常量 DIR 写入配置文件而不进行扩展。到目前为止,我还没有想出办法来做到这一点。我已经尝试了一切来编写recursiveArrayReplace方法来删除整个路径并尝试用

替换它
    __DIR__

但总是出现

    '__DIR__ . /configs/template.php'

在这种情况下,当它运行时不会扩展。

我该怎么写

   __DIR__ to an array in a file or how ever else without the quotes so that it looks like,

array('template_dir' => __DIR__ . '/configs/templates.php');

3 个答案:

答案 0 :(得分:1)

您需要替换起始撇号,而不是用__DIR__替换路径。

E.g。如果路径是/foo/bar,那么你想要做这个替换:

"'/foo/bar""__DIR__ . '"


在:

'/foo/bar/configs/template.php'

后:

__DIR__ . '/configs/template.php'

答案 1 :(得分:1)

这是不可能的,因为var_export()打印变量,而不是表达式。

最好将所有路径编写为相对目录,并在获取数据后规范化为完整的工作路径。

您还可以考虑返回一个对象:

class Config
{
    private $paths = array(
        'image_path' => '/configs/template.php',
    );

    public function __get($key)
    {
        return __DIR__ . $this->paths[$key];
    }
}

return new Config;

或者,您必须自己生成PHP代码。

答案 2 :(得分:0)

如何通过以下方式直接编写配置:

$data = <<<EOT
return  array('template_dir' => __DIR__ . '/configs/templates.php');
EOT;

file_put_contents($config, $data);