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

2022-08-30 12:18:31

php 中的静态变量 gotcha

我来自Java背景,最近为一个项目切换到php。我在php中发现了一个意想不到的行为。

设置为某个静态变量的值不会在请求之间保持持久性

我不确定这是否是预期的巴哈维。因为在java中,你总是可以持久保存非常常用的变量,或者在请求中说出诸如dbname,hostname,username,password之类的常量,这样你就不必总是从本地属性文件中读取它们。

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

有人可以建议我在php中更好的方法来做到这一点吗?


答案 1

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

例:

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>';

答案 2

静态变量仅适用于单个请求。如果希望数据在特定用户的请求之间持久保存,则仅使用会话变量。

对他们来说,一个很好的入门tut位于这里:http://www.tizag.com/phpT/phpsessions.php


推荐