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

Vai*_*ble 35 php static persistence

在php中的静态变量陷阱

我来自Java背景,并且最近已经为一个项目切换到了php.我在php中发现了一个意外的行为.

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

我不确定这是否是预期的行为.因为在java中,您始终可以持久保存非常常用的变量,或者在请求中说出dbname,hostname,username,password等常量,这样您就不必总是从本地属性文件中读取它们.

这种行为是否正常?如果它是正常的那么有没有其他方法可以保持分配给请求中的变量的值?

有人可以建议我在PHP中更好的方法吗?

Ros*_*oss 22

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

例:

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>';
Run Code Online (Sandbox Code Playgroud)


Mat*_*zza 5

静态变量仅适用于一个请求。如果您希望数据在对特定用户的请求之间保持不变,请仅使用会话变量。

一个很好的入门教程位于这里:http : //www.tizag.com/phpT/phpsessions.php