PHP-使用类似于分叉的方法多次定义一个常量?(Windows)


PHP - Using a method similar to forking to define one constant multiple times? (Windows)

我目前正在使用一个现有的应用程序,该应用程序在用户登录时定义了几个常量。例如,如果Alice登录SOME_CONSTANT则定义为1,而如果Bob登录SOME_CONSTANT则定义为2。现在我正在努力写一个剧本,它会做一些事情,就像爱丽丝一样,也会做一些事,就像鲍勃一样。所谓"好像是",我的意思是SOME_CONSTANT是以一种方式定义一次迭代,以另一种方式来定义下一次迭代。不幸的是,常量并不是切换值的最佳方法,此时重构应用程序以将其从常量更改为常量并不是一种选择。

我考虑过的一种方法是使用pcntl_fork()。我会在定义常数之前分叉,并为每个常数运行一个单独的过程。但是,我希望这个脚本能够在Windows和Linux上运行。目前,Windows不直接支持pcntl扩展。如果我能帮忙的话,我会尽量避免通过Cygwin让一切正常工作。

我考虑过的另一种方法是让脚本使用exec("php childscript.php constant_value")调用子脚本。这个方法会允许一个子脚本以一种方式定义常量,而另一个子脚本则以另一种方式来定义常量吗?我认为应该,但我还没有测试。此外,这个方法还有其他主要问题吗?

还有其他我没有考虑过的方法会是更好的选择吗?谢谢你抽出时间。

正如您已经注意到的,使用const变量不是处理任务的可行方法。此外,即使你不需要编写一个脚本来对多个用户执行某些操作,单个实例也不起作用——当用户登录时,你需要"设置常量",而这是你做不到的。

如果您正在寻找一个伪readonly实现,并且您正在使用OOP样式,那么您可以添加一个private变量并覆盖__get魔术方法。因此,当外部环境请求SOME_CONSTANT时,您的类将返回_someFakeConstant的值。然后,在类内的login()switchUser()方法中,可以安全地更改值。

示例:

class User {
    private $_someFakeConstant = -1;
    public function __get($name) {
        if ($name == 'SOME_CONSTANT') {
            return $this->_someFakeConstant;
        }
        // handle undefined variables; trigger_error() will work (see example on php.net)
    }
    public function login() {
        // logic to "identify" the user
        $this->_someFakeConstant = 1;
    }
}
$user = new User();
$user->login();
echo $user->SOME_CONSTANT;

使用exec()调用PHP子脚本的方法似乎运行良好。