Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP-使用类似于forking的方法多次定义一个常量?(窗口)_Php_Exec_Constants_Fork - Fatal编程技术网

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

PHP-使用类似于forking的方法多次定义一个常量?(窗口),php,exec,constants,fork,Php,Exec,Constants,Fork,我目前正在使用一个现有的应用程序,它在用户登录时定义了几个常量。例如,如果Alice登录到中,则某些常量被定义为1,而如果Bob登录到中,则某些常量被定义为2。现在我正在尝试写一个脚本,它将做一些事情,就像它是爱丽丝一样,还有一些事情就像它是鲍勃一样。所谓“好像是”,我的意思是,某个常量在一次迭代中定义为一种方式,在下一次迭代中定义为另一种方式。不幸的是,常量在转换值方面不是最好的,此时重构应用程序以将这些值从常量更改为常量不是一个选项 我考虑过的一种方法是使用pcntl_fork()。我会在定

我目前正在使用一个现有的应用程序,它在用户登录时定义了几个常量。例如,如果Alice登录到
中,则某些常量
被定义为
1
,而如果Bob登录到
中,则某些常量
被定义为
2
。现在我正在尝试写一个脚本,它将做一些事情,就像它是爱丽丝一样,还有一些事情就像它是鲍勃一样。所谓“好像是”,我的意思是,某个常量在一次迭代中定义为一种方式,在下一次迭代中定义为另一种方式。不幸的是,常量在转换值方面不是最好的,此时重构应用程序以将这些值从常量更改为常量不是一个选项

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

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


有没有其他我没有考虑过的更好的方法?谢谢您的时间。

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

如果您正在寻找伪--
readonly
实现,并且使用OOP风格,那么可以添加一个
private
变量并覆盖magic方法。因此,当外部请求
someFakeConstant
时,您的类将返回
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子脚本的方法似乎工作正常。

。。。你想要一个可变的常数,但需要假装它还是一个常数?咬紧牙关,改用一个变量。我希望最终把它们变成变量。在我开始这个项目之前,这些都是常量。然而,这是一个巨大的变化,我现在没有时间去做。我知道这是处理事情的“正确”方式,但现在对我来说这不是一个合理的选择。不幸的是,除非我读到了你说的错误,否则这仍然需要我用新的东西替换掉所有现有的常量。早在我开始这个项目之前,我正在开发的系统就基于这些常量。我希望最终将常量转换为更好的东西,但是对于这个脚本来说,重构是不值得的。如果没有好的方法,我可以使用其他解决方法。谢谢你的回答。@golmschenk我不确定我是否明白你的意思。您的问题是如何为每个用户设置不同的(常量)值,但您不希望每个用户设置不同的值吗?我很高兴能帮上忙,但我认为我们的处境不同。我只是说实现我所追求的目标的方法对我来说并不实用。我正在开发的应用程序在我开始开发项目之前就已经基于这些常量。对于这些常量的定义方式,可能需要做更多的工作,我现在还有时间。我确实想更改它们的值,但我认为我现在无法合理地更改常量(即,将它们从常量更改为类似常量的值)。这有意义吗?