编辑文件

时间:2015-06-15 09:55:47

标签: php

我有一个带有注释和代码的php文件。

<?php

// Some comments
define('THING', 'thing1');

$variable = 'string1';

if ($statement === true) { echo 'true1'; }

我想知道编辑此文件的最佳方法是更改​​变量并使用更改吐出新版本的文件。

<?php

// Some comments
define('THING', 'thing2');

$variable = 'string2';

if ($statement === true) { echo 'true2'; }

文件相当大。我可以编写一个函数,它将一个巨大的字符串加在一起输出,但是所有我必须处理的评论等等都会令人头疼。

我想要包含该文件,但这只是允许它的变量在另一个类中使用。

到目前为止,我唯一能想到的是制作文件的“骨架”版本(下面),并将要更改的变量写入文件中。我可以分配它们,但实际上将它们全部转发回文件,就像上面的任何一个例子一样,我已经逃脱了。

这样做的最佳方法是什么?

<?php

// Some comments
define('THING', $thing);

$variable = $string;

if ($statement === true) { echo $true; }

2 个答案:

答案 0 :(得分:2)

我上面会回应@ Prisoner的评论,但我看到你提到你正在处理一个限制。您可以使用strtr()进行基本模板化,如下所示:

<?php

$template = <<<'STR'
hi there {{ name }}

it's {{ day }}. how are you today?

STR;

$vars = [
    '{{ name }}' => 'Darragh',
    '{{ day }}'  => date('l'),
];

$result = strtr($template, $vars);

产生以下字符串:

"hi there Darragh

it's Monday. how are you today?"

然后,您可以将结果写入文件,回显等等。

对于上面的具体示例:

<?php

$template = <<<'STR'
<?php

define('THING', '{{ const }}');

$variable = '{{ variable }}';

if ($statement === true) { echo '{{ echo }}'; }
STR;

$vars = [
    '{{ const }}'    => 'thing1',
    '{{ variable }}' => 'string1',
    '{{ echo }}'     => 'true1',
];

echo $result = strtr($template, $vars);

收率:

"<?php

define('THING', 'thing1');

$variable = 'string1';

if ($statement === true) { echo 'true1'; }"

希望这会有所帮助:)

答案 1 :(得分:1)

听起来像是简单字符串替换问题的一种形式。

如果您需要将新变量保存到新文件中,而“骨架”文件仍然是有效的PHP语法,则可能需要以一种可以唯一且正确找到它们的方式命名模板变量。更换。您基本上是在创建自己的简单模板语言。

因此,您的模板文件可能如下所示:

<?php

// Some comments
define('THING', $TEMPLATE_VARIABLE['thing']);

$variable = $TEMPLATE_VARIABLE['string'];

if ($statement === true) { echo $TEMPLATE_VARIABLE['true']; }

替换模板变量的代码

// Read the template file
$str = file_get_contents($template_file_path);

// Make your replacements
$str = str_replace("$TEMPLATE_VARIABLE['thing']", 'thing1', $str);
$str = str_replace("$TEMPLATE_VARIABLE['string']", 'string1', $str);
$str = str_replace("$TEMPLATE_VARIABLE['true']", 'true1', $str);

// Save as a new file
if (file_put_contents($output_file_path, $str, LOCK_EX) === FALSE) {
    throw new Exception('Cannot save file. Possibly no write permissions.');
}

如果您不介意您的模板文件不是有效的PHP,您当然可以对模板感到疯狂,例如: define('THING', ~!@#$THING%^&*);

最终注意:在任何情况下,如果您有足够的时间和精力进行重构,请执行此操作。您显示的代码段不是管理可能在多个位置使用的变量的最佳方法(它们实际上是应用程序设置吗?)。最好的办法是拥有一个定义所有这些变量的配置文件。

// In the config file
define('MESSAGE_TO_SHOW_IF_TRUE', 'true');
define('DEFAULT_USER_NAME', 'lala');

// In the application file
if ($statement === TRUE) { echo MESSAGE_TO_SHOW_IF_TRUE; }
$name = DEFAULT_USER_NAME;