2017-04-11 67 views
6

有数以百计的地方在我的项目包含以下代码:通过连接另一个字符串覆盖一个字符串

include $root . $template; 

哪里$root对于CRM和$template相关的部分文档根目录的HTML模板文件。对于CRM的不同部分,$root变量是不同的。

我想现在让CRM的所有部分使用相同的模板文件。我不能简单地将$root更改为中央文档根目录,因为代码中有其他地方使用该变量。我只是想改变它来加载模板。

有没有办法节省时间,所以我不必在我的代码中出现所有这些地方的地方?当concatinated时,是否有可能使$template字符串覆盖$root字符串?

$root="$_SERVER['document_root']."\some_folder"; 
$template="[something_to_ignore_concatination?]".$_SERVER['document_root']."\template_file"; 
//So $root.$template = just $template 
+0

首先对'$ root'使用一个常量,它不会改变,所以dosomething就像'define('APPROOT','/ foo/bar')'。然后使这个'$ template = APPROOT。“/ rest/of/the/path”' – JustOnUnderMillions

+0

为什么不在你的文本编辑器中进行全局查找和替换?找到'include $ root。 $ template;'并用'include $ template;'替换。崇高的文本3绝对有这种能力,例如 – Spholt

+0

你是假设这是可能的,还是你真的会使用这样的解决方案? –

回答

3

警告:你会看到什么下面是可憎的,不要在真正的软件使用此功能!

假设这些值:

$_SERVER['document_root'] = 'path/to/root' 

$root == $_SERVER['document_root'] . '/some_folder' == 'path/to/root/some_folder' 

$template == '/' . $_SERVER['document_root'] . '/file.php' == '/path/to/root/file.php' 

$root . $template == 'path/to/root/some_folder/path/to/root/file.php' 

你可以符号链接

path/to/root/some_folder/path/to/root -> path/to/root/ 

因此,双路径仍然得到解决。

注意:上面的路径应视为相对于添加到PHP include_path的文件夹之一。

+0

非常有创意,谢谢你的解决方案。你说得对,我应该搜索并更换为最佳做法。 – dlofrodloh

相关问题