PHP - 使用类似于forking的方法多次定义一个常量? (视窗)

时间:2012-09-01 05:31:46

标签: php exec constants fork

我目前正在使用现有的应用程序,该应用程序在用户登录时定义了几个常量。例如,如果Alice登录SOME_CONSTANT定义为1,而Bob登录SOME_CONSTANT定义为2。现在,我正在尝试编写一个脚本,它将执行一些事情,好像它是Alice和一些事情,好像它是Bob。通过“好像它是”,我的意思是SOME_CONSTANT被定义为一次迭代的一种方式和下一次迭代的另一种方式。不幸的是,常量不是切换值的最佳选择,重构应用程序以将这些变为常量不是一种选择。

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

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

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

2 个答案:

答案 0 :(得分:0)

正如您已经注意到的,使用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;

答案 1 :(得分:0)

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