【问题标题】:Can 2 PHP scripts launched separately interact with each other?2 个单独启动的 PHP 脚本可以相互交互吗?
【发布时间】:2015-10-21 14:18:38
【问题描述】:

假设我有这门课

class Hello
{
    /**
     * Construct won't be called inside this class and is uncallable from
     * the outside. This prevents instantiating this class.
     * This is by purpose, because we want a static class.
     */
    private function __construct() {}
    private static $greeting = 'Hello';
    private static $initialized = false;

    private static function initialize()
    {
        if (self::$initialized)
            return;

        self::$greeting .= ' There!';
        self::$initialized = true;
    }

    public static function greet()
    {
        self::initialize();
        echo self::$greeting;
    }

    public static function changeGreet($new)
    {
        self::initialize();
        self::$greeting = $new;
    }
}

我有 2 个脚本,一个在命令行中运行。

cmdLine.php (php cmdLine.php)

for($i = 0; $i < 25;$i++){
    echo Hello::greet() . PHP_EOL;
    sleep(5);
}

还有一个我在浏览器中加载的。

browser.php

Hello::changeGreet('NewGreet');

我想,在第一次运行 cmdLine.php 之后。然后加载 browser.php,下次循环运行时问候语会改变,但它没有。

仅使用 PHP 就可以做到这一点吗?

【问题讨论】:

  • 您可以通过 shell_exec php.net/manual/en/function.shell-exec.php 或类似函数调用 shell 命令。 $result = shell_exec("cmd") 将在一个变量中为您提供完整的返回字符串。
  • 抱歉,可能不清楚,这不是我遇到问题的命令行,我在终端中运行此示例,这是从命令行脚本输出的消息运行 browser.php 脚本时不会更改。
  • 我认为这两个脚本都是由服务器在单独的进程中运行的,所以这是不可能的。如果您使用了一些不同进程可以共享的存储(文件系统、数据库等)。
  • 浏览器和命令行将在不同的进程中运行,因此将使用不同的类实例。如果不使用某种方式来存储类的状态,你将无法得到你想要的
  • 看起来就是这样。是时候重新考虑如何让这样的事情发挥作用了!

标签: php static-methods


【解决方案1】:

只用 PHP 就可以做到这一点吗?:不。

这个工作需要某种中介。需要一个文件、数据库或其他东西。

(例如)

initialize() 中,您可以使用file_get_contents() 打开一个文件,然后在需要更改时使用file_put_contents() 存储您的问候语。

【讨论】:

  • 这很不幸,但我认为答案会是这样。
猜你喜欢
  • 2011-10-24
  • 1970-01-01
  • 1970-01-01
  • 2023-03-04
  • 1970-01-01
  • 2011-06-21
  • 2018-01-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多