我已经使用这种方法多年了,从来没有遇到过问题;然而,对于这是否是一种好的做法,我总是有点唠叨。我将首先介绍我正在做的具体工作,然后提供推理的背景,因为我确信它会受到质疑。
问题/问题 我file_get_contents用来检索正在运行的脚本的内容。在本质上:
<?php
/**
* My PHP Script On Load
* Version: 1.0.0
*/
class MyClass {
public function __construct() {
$matches = array();
if (preg_match('Version\: ([0-9\.]+)/s', file_get_contents(__FILE__), $matches)) {
$version = $matches[1];
}
}
}
$class = new MyClass();
上述工作,以及在我自己使用的数千个页面加载中(以及数万个从未听说过可能源于此的错误),我在这样做时从未遇到过问题。我一直想知道是 a) 这是不好的做法,还是 b) 它有可能导致错误。
背景/用例 自然,第一个问题将是“你为什么不把版本放在构造函数中?” 当然,我可以,但我必须将插件版本放在文件顶部的注释中,如图所示,我不这样做的唯一原因是我不会忘记更新一个或其他。通过将它放在一个地方,我永远不必担心搞砸了,如果它进入发布版本,可能会导致我正在使用的平台的更新系统出现重大问题。
除了使用部署/CI 自动放置版本号之外,我对如何解决这个问题持开放态度,我已经考虑过并且可能会在某个时候实施。但是三件事必须是正确的:1) 必须以示例中显示的相同格式在文件顶部注释掉版本,2) 我必须能够在同一个文件中为 PHP 代码提供版本, 3) 类必须从同一个文件中实例化。
尚方宝剑之说
一只名叫tom的猫