gpt4 book ai didi

php - 需要建议通过 php 编辑 php

转载 作者:行者123 更新时间:2023-12-04 04:35:39 30 4
gpt4 key购买 nike

我有一个用 PHP 编写的配置文件,如下所示,

<?php

class WebConfig {

public static $WEBPATH = '/customers';
public static $ACCOUNTPATH = '/empaccountpath';
public static $INFO = '/accountInfo';
const ACCOUNT_STATUS = '/account_status';
const ENABLE_SEARCH = '/enable_search';
}

?>

所以我想用PHP开发一个接口(interface),它可以编辑文件值,如 $WEBPATH , $ACCOUNTPATHconst值(value)观。

简单的 PHP 编辑器脚本将完成上述工作。但它不检查语法。

请建议如何在 PHP 中有效地做到这一点。

最佳答案

更好的解决方案

许多其他配置存储格式更适合这种事情。查看 php file returns array , ini , json , xml yaml .

PHP 文件返回数组”是一个简单的 PHP 文件,看起来像这样

return(
array(
'config_key' => 'config_value'
)
);

?>

包含该文件时,您的代码可以检索此文件的返回值: $x = include('file.php');$x将具有数组中的值。
INI为人类阅读或书写简单直观。它的结构有限。 PHP 可以使用一个函数读取它,但它仅在单独的(非默认)包中具有写入功能。这意味着您必须自己生成 ini 文件。
JSON对于人类来说,阅读或写作“相当”简单直观。它具有灵活的结构可扩展结构。 PHP 可以读取和写入 JSON文件只使用几个函数。不幸的是 PHP 不保留 JSON pretty-print 格式,因此在您覆盖文件后,它将全部在一行中,之后更难阅读。
XML对于人类来说阅读起来简单直观,它可以提供非常丰富的信息,因为它对所有内容都非常冗长。我的结构几乎和 JSON 一样灵活它是可扩展的。 PHP 可以读取和写入 XML但这样做意味着使用几行代码(简单的东西是 5-10 行)。
YAML是另一个易于人类读写的选项,PHP 没有直接 YAML支持,但还有其他选择(见下文)。它的结构灵活且可扩展。对于我个人理解 YAML不太直观。

Zend_Config 可用作读取/写入上述任何格式的接口(interface),并可用于抽象文件格式本身并为您的应用程序提供与格式无关的配置处理方式。

您还可以使用数据库来存储您的配置或一个单独的 SQLite 数据库,专门用于存储一般配置 - 这通常用于需要以细粒度的可搜索格式保留许多配置,以允许各种类型的分层覆盖(例如。 :一般默认值、 Controller 默认值、 Action 默认值、特殊情况默认值)。

如何在 PHP 中做到这一点

您不需要像@geomagas 所说的那样创建语言解析器。使用 includerequire够了,PHP 解释器会将"new"类加载到内存中并确保它可用。

您需要做的就是创建一个模板文件来替换一些值,例如:
<?php

class WebConfig {

public static $WEBPATH = '$_replace_webpath';
public static $ACCOUNTPATH = '$_replace_accountpath';
public static $INFO = '$_replace_info';
const ACCOUNT_STATUS = '$_replace_account_status';
const ENABLE_SEARCH = '$_replace_enable_search';
}

然后加载读取文件,并将其替换为当前值,例如:
$config_template = file_get_contents('/path/to/config/template.php.template');
str_replace(
array('$_replace_webpath' ... ),
array('/customers' ... ),
$config_template
);

PrestaShop 使用 PHP 文件进行配置。它会在需要时重写它们。

关于php - 需要建议通过 php 编辑 php,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19783938/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com