0

我目前正在使用一个现有的应用程序,该应用程序在用户登录时定义了几个常量。例如,如果 Alice 登录SOME_CONSTANT被定义为1,而如果 Bob 登录SOME_CONSTANT被定义为2。现在我正在尝试编写一个脚本,它会像爱丽丝一样做几件事,像鲍勃一样做几件事。“好像它是”我的意思SOME_CONSTANT是为一次迭代定义一种方式,为下一次迭代定义另一种方式。不幸的是,常量在切换值方面并不是最好的,并且重构应用程序以将它们从常量更改为目前不是一种选择。

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

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

还有另一种我没有考虑过的方法会是更好的选择吗?感谢您的时间。

4

2 回答 2

0

正如您已经注意到的,使用const变量不是处理任务的可行方法。此外,即使您不需要编写脚本来与多个用户一起做某事,单个实例也行不通 - 您需要在用户登录时“设置常量”,这是您无法做到的做。

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

例子:

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;
于 2012-09-01T06:33:33.353 回答
0

使用exec()调用 PHP 子脚本的方法似乎工作正常。

于 2012-09-07T18:59:07.680 回答