我来自Java背景,并且最近已经为一个项目切换到了php。 我在php中发现了一个意外的行为。
设置为某个静态变量的值为 不会在中保持持久性 的请求。
我不确定这是否是预期的行为。因为在java中,您可以始终保留非常常用的变量,或者在请求中说出dbname,hostname,username,password等常量,这样就不必总是从本地属性文件中读取它们。
这种行为是正常的吗?如果它是正常的,那么我是否有任何替代方法可以在请求中保留分配给变量的值?
有人可以建议我在php中更好的方法吗?
答案 0 :(得分:20)
不,虽然静态变量将保留当前请求,但您需要将其添加到会话中以保持其在请求之间的值。
示例:
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>';
答案 1 :(得分:3)
静态变量仅适用于单个请求。如果您希望数据在特定用户的请求之间保持不变,则仅使用会话变量。
对他们来说,一个好的启动器位于: http://www.tizag.com/phpT/phpsessions.php
答案 2 :(得分:2)
如果您开始跨会话使用复杂数据集,您可能希望将数据存储在序列化到数据库并在会话恢复时抽出的对象中。
PHP中的变量并不意味着持久化。应用程序(堆栈)的流程在每个页面运行时开始执行。后台没有任何东西可以继续您的逻辑或应用程序。最接近的是会话,但您不希望在那里存储数据库访问等信息。
您的数据库配置应该在某种配置或环境文件中,一次访问以连接到数据库,一旦建立连接,您可以随时查询并使用连接句柄来识别要使用的连接