php - php 中的静态变量是否在请求中持续存在?

标签 php static persistence

php 中的静态变量 gotcha

我来自 Java 背景,最近为一个项目切换到 php。 我在 php.ini 中发现了一种意外行为。

Value set to some static variable is not staying persistent across the requests.

我不确定这是否是预期的行为。因为在 java 中,您始终可以在请求中保留非常常用的变量或说诸如 dbname,hostname,username,password 之类的常量,这样您就不必总是从本地属性文件中读取它们。

这种行为正常吗?如果它是正常的,那么是否有任何替代方法可以让我在请求中保留分配给变量的值?

有人可以建议我在 php 中执行此操作的更好方法吗?

最佳答案

不,虽然静态变量将保留在当前请求中,但您需要将其添加到 session 中以在请求之间保持其值。

例子:

session_start();

class Car {
    public static $make;
    public function __construct($make) {
        self::$make = $make;
    }
}

$c = new Car('Bugatti');
echo '<p>' . Car::$make . '</p>';
unset($c);

if (!isset($_SESSION['make'])) {
    echo '<p>' . Car::$make . '</p>';
    $c = new Car('Ferrari');
    echo '<p>' . Car::$make . '</p>';
}

$_SESSION['make'] = Car::$make;

echo '<p>' . $_SESSION['make'] . '</p>';

关于php - php 中的静态变量是否在请求中持续存在?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/520132/

相关文章:

php - 查找两个不同列中的两个日期之间是否存在条目?

php - laravel 5.7 类不存在反射异常报错

php - 试图回应一个简单的货币数学语句,为每个 = "30"的记录集增加 5 美元的值(value)?

asp.net-mvc - 使用 IIS7 访问 ASP.Net MVC 项目的静态内容

java - 除非那些内部类也被声明为静态,否则我们不能在 [public] 内部类中声明静态方法的确切原因是什么?azi

json - 如何将JSON数据直接持久化存储在Flutter中供查询和离线使用?

cocoa-touch - 在应用程序关闭时存储一个 BOOL

java - 使用 EntityManagerFactory 获取刚刚添加的对象

php - 所有付款的 MYSQL 总值(value)字段

java - Java中的公共(public)静态非内部类?