我有一个带有注释和代码的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; }
答案 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;