在php.net上找到数据库适配器

在php.net上找到数据库适配器,php,mysql,Php,Mysql,我在php.net的mysql连接页面上找到了一个db适配器。 这是一个浏览量很大的页面(我可以想象)。 它包括作者声称的单例模式类 发现 作者说: “这里有一个单例类来管理单个数据库连接 Open方法使用常量值作为defautl,从ini文件中读取 通过在每个网页顶部加载的初始化脚本 也可以通过手动输入自己的(在中)来覆盖默认值 如果您需要切换服务器或数据库名称(脚本中) 函数接受一个准备好的语句并返回第一行, 第一个关联行、第一个单元格或基于 第二个参数(如果省略,则整个结果)。” 用法:$

我在php.net的mysql连接页面上找到了一个db适配器。
这是一个浏览量很大的页面(我可以想象)。

它包括作者声称的单例模式类

发现

作者说:

“这里有一个单例类来管理单个数据库连接 Open方法使用常量值作为defautl,从ini文件中读取 通过在每个网页顶部加载的初始化脚本 也可以通过手动输入自己的(在中)来覆盖默认值 如果您需要切换服务器或数据库名称(脚本中) 函数接受一个准备好的语句并返回第一行, 第一个关联行、第一个单元格或基于 第二个参数(如果省略,则整个结果)。”

用法:$DB=DB::Open()
$result=$DB->qry(“{SQL语句};”)


在看了代码之后,我有一个问题,这真的是一个单例(参见DB类和开放函数)


静态属性如何使单例模式工作

我明白你的意思,如果
self::$DB_Open
确实存在,它会将其设置为null并创建一个新的对象实例

看来你是对的,这不像是单例模式

关于具有静态属性的单例模式。与对象范围中的实例变量不同,静态变量位于类范围
这意味着,即使多次创建一个对象,它每次仍将使用相同的静态属性值。这是什么让他们成为伟大的计数器,因此全球单身

见下文:

Class A {
static int y=1;
int x=3;
}
$newA = new A();
$newB = new A();
$newC = new A();
上面创建了3个x的实例。您可以在1个实例中进行更改,但它只会在该1个实例中进行更改。
但只创建了一个y的实例。所以1中的一个改变,所有3个都会改变。它们都存在于相同的环境中。因此,指向相同的值。如果您增加一个,其他人将显示相同的增量ect

因此,为了重新迭代,即使只有一个
DB_Conn
实例存在,它也会不断地重置它并再次写入它(它不必这样做)


为了解决这个问题,作者可以返回
self::$DB\u Open
属性,如果它确实存在。

我明白你的意思,如果
self::$DB\u Open
确实存在,它会将其设置为null并创建对象的新实例

看来你是对的,这不像是单例模式

关于具有静态属性的单例模式。与对象范围中的实例变量不同,静态变量位于类范围
这意味着,即使多次创建一个对象,它每次仍将使用相同的静态属性值。这是什么让他们成为伟大的计数器,因此全球单身

见下文:

Class A {
static int y=1;
int x=3;
}
$newA = new A();
$newB = new A();
$newC = new A();
上面创建了3个x的实例。您可以在1个实例中进行更改,但它只会在该1个实例中进行更改。
但只创建了一个y的实例。所以1中的一个改变,所有3个都会改变。它们都存在于相同的环境中。因此,指向相同的值。如果您增加一个,其他人将显示相同的增量ect

因此,为了重新迭代,即使只有一个
DB_Conn
实例存在,它也会不断地重置它并再次写入它(它不必这样做)


为了解决这个问题,作者可以返回
self::$DB_Open
属性(如果它确实存在)。

啊,我看到静态变量可以是全局属性,因为您可以随时访问相同的静态变量(如静态方法),并且它指向相同的值。Thanksah我看到静态变量可以是全局属性,因为您可以随时访问相同的静态变量(如静态方法),并且它指向相同的值。感谢自PHP5.5.0起,此扩展已被弃用,并将在将来删除。相反,应该使用MySQLi或PDO_MySQL扩展。另请参见MySQL:选择API指南和相关FAQ以了解更多信息。您好@Chris您好,谢谢。只是对oop原理和单例模式很感兴趣。thanksA好的单例构造是这样的:查看:)感谢alot@Chris关注一下这个扩展从PHP5.5.0开始就被弃用了,将来会被删除。相反,应该使用MySQLi或PDO_MySQL扩展。另请参见MySQL:选择API指南和相关FAQ以了解更多信息。您好@Chris您好,谢谢。只是对oop原理和单例模式很感兴趣。thanksA好的单例构造是这样的:查看:)非常感谢@Chris看一看