例如,在这种情况下,'views'计数在会话期间显然正常递增但是mysqli对象没有被维护,并且在会话期间不能被重用(如果页面被刷新或者其他)。 _SESSION全局只能包含简单类型吗?还有什么可以限制这个?编辑:我希望这是为了提高性能。因此,如果有另一种方法可以实现这一点,我很高兴知道。
<?php
session_start();
if(isset($_SESSION['db']))
{
$mysqli = $_SESSION['db'];
$_SESSION['views']=$_SESSION['views']+1;
}
else
{
$mysqli = new mysqli(...);
$_SESSION['db'] = $mysqli;
$_SESSION['views']=1;
}
echo "Views=". $_SESSION['views'];
?>
答案 0 :(得分:3)
不,没有php资源可序列化。因此,您需要每次都实例化mysqli
对象。
编辑:我希望这是为了提高绩效。
头号性能优化规则是:第一个衡量 - 第二个优化。没有剖析(测量),世界上任何人都无法说出性能问题。
那么,你的应用程序运行速度难以接受吗?好吧,衡量是什么让它如此缓慢并优化那个特定的地方。我可以向你保证,这不是与mysql的连接。
答案 1 :(得分:0)
你不能直接这样做。但你可以使用魔术方法:__sleep()
and __wakeup()
。
class Connection {
protected $link;
private $server, $username, $password, $db;
public function __construct($server, $username, $password, $db) {
$this->server = $server;
$this->username = $username;
$this->password = $password;
$this->db = $db;
$this->connect();
}
private function connect() {
$this->link = mysql_connect($this->server, $this->username, $this->password);
mysql_select_db($this->db, $this->link);
}
public function __sleep() {
return array('server', 'username', 'password', 'db');
}
public function __wakeup() {
$this->connect();
}
}
我不认为在会议中这样做是必要的。