为了账号安全,请及时绑定邮箱和手机立即绑定

进行销毁的时候出现错误,是不是单例连接的只有一个句柄?

进行销毁的时候出现错误,是不是单例连接的只有一个句柄?

PHP
海绵宝宝撒 2023-03-04 23:13:17
class conn{private $db_hand;function conn(){$mysql_server_name="localhost";$mysql_username="root";$mysql_password="";$mysql_database="test";$this->db_hand=mysql_connect($mysql_server_name, $mysql_username,$mysql_password)or die("连接数据库失败");}public static function get(){static $db = null;if ( $db == null )$db = new conn();return $db;}public function connect(){return $this->db_hand;}}然后进行销毁的时候出现错误,是不是单例连接的只有一个句柄,然后调用这个类的时候用析构函数的时候进行了多次关闭?能说说原理嘛?
查看完整描述

2 回答

?
倚天杖

TA贡献1828条经验 获得超3个赞

class conn{
private $db_hand;
function conn(){

$mysql_server_name="localhost";
$mysql_username="root";
$mysql_password="";
$mysql_database="test";
$db_hand=mysql_connect($mysql_server_name, $mysql_username,
$mysql_password)or die("连接数据库失败");
$this->db_hand=$db_hand;
}
function __destruct()
{
$te=mysql_close($this->db_hand);
if($te)
echo 'ok';
else
echo 'no';
}

}
$class=new conn;

不要怪我无视你的中间的代码我来解释一下:
你在开始把 $db_hand 定义为了本类的私有变量。
我看你这里的写法是错的:$this->db_hand=mysql_connect($mysql_server_name, $mysql_username,
$mysql_password)or die("连接数据库失败");
这样写,你下面是没办法调用的。。你换成这样写:
$db_hand=mysql_connect($mysql_server_name, $mysql_username,
$mysql_password)or die("连接数据库失败");
$this->db_hand=$db_hand;
首先,赋值-然后在给名字。
下面的销毁函数才可以使用
function __destruct()//销毁函数
{
$te=mysql_close($this->db_hand);//关闭数据库
if($te)//关闭成功
echo 'ok';
else//失败
echo 'no';


private 是定义私有变量。换句话说,你这个$db_hand只能在本类内被使用。
首先你必须声明这个变量的值:$db_hand=mysql_connect($mysql_server_name, $mysql_username,
$mysql_password)or die("连接数据库失败");

声明 以后,你在初始化它(其他函数才可以使用):$this->db_hand=$db_hand;
$this->是访问内部变量的意思,这个是固定的
db_hand是我随便取的。
$db_hand是上面我声明的变量,你也可以换成其他的,只要它在初始化之上,都可以。、

其他的函数就用$this->db_hand进行访问你刚才定义的$db_hand


查看完整回答
反对 回复 2023-03-08
?
慕森卡

TA贡献1806条经验 获得超8个赞

你这个不是长连接 不用手工关闭 PHP机制会自动关闭不用的mysql链接

查看完整回答
反对 回复 2023-03-08
  • 2 回答
  • 0 关注
  • 45 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信