PHP中静态变量的陷阱
我来自Java背景,最近为一个项目转到了php。在php中,我发现了一种意外的行为。
给某个静态变量赋值的值 不会在请求之间保持持久。
我不确定这是否是预期的行为。因为在Java中,您可以始终将常用变量或常量(例如dbname、hostname、username和password)跨请求持久化,以便您不必始终从本地属性文件中读取它们。
这种行为是否正常?如果是正常的,那么是否有其他方法可以在请求之间持久化分配给变量的值?
有人能否建议我在php中更好的方法?
我来自Java背景,最近为一个项目转到了php。在php中,我发现了一种意外的行为。
给某个静态变量赋值的值 不会在请求之间保持持久。
我不确定这是否是预期的行为。因为在Java中,您可以始终将常用变量或常量(例如dbname、hostname、username和password)跨请求持久化,以便您不必始终从本地属性文件中读取它们。
这种行为是否正常?如果是正常的,那么是否有其他方法可以在请求之间持久化分配给变量的值?
有人能否建议我在php中更好的方法?
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中的变量并不是持久的。每次页面运行时,应用程序的流程(堆栈)都会从头到尾执行。没有任何东西在后台继续执行您的逻辑或应用程序。最接近的是会话,但您不希望在其中存储诸如db访问等信息。
您的数据库配置应该在某种配置或环境文件中,只需访问一次即可连接到数据库,一旦建立了连接,您就可以简单地查询需要的内容,并使用连接句柄标识要使用的连接。