-2

http://www.php.net/manual/en/sqlite3.open.php暗示我应该这样做:

class DB extends SQLite3{
    function __construct(){
        $this->open('database.db');
    }
}

$db = new DB();
$db->query("CREATE TABLE derp(asdf, asdf)");

在此:

$db = SQLite3::open('database.db');
SQLite3::query("CREATE TABLE derp(asdf, asdf)");

为什么 PHP.net 的人们会有一个扩展 SQLite3 的类的示例?

4

2 回答 2

2

简单地说,静态方法似乎SQLite3::open也不SQLite3::query是,因此以静态方式访问它们是不正确的。相反,它们是实例成员,您需要一个实例来访问它们。我想象的上面和引用的示例也是为了说明如何创建可重用的数据库驱动程序(例如DB,扩展的对象SQLite3),这样您就不必总是告诉它要打开哪个数据库文件。

但是,如果您不希望扩展SQLite3该类,则以下内容似乎同样有效,并为您提供与您的第二个示例暗示您正在寻找的类似的语法(请参阅:http ://www.php.net /manual/en/sqlite3.construct.php):

$db = new SQLite3('database.db');
$db->exec("CREATE TABLE derp(asdf STRING)");
$db->query("SELECT asdf FROM derp");
于 2013-11-10T21:39:46.607 回答
0

简单的答案是,他们不会说“做这个,不是这个”。

他们展示了一个例子(你的第一个代码块)。我在页面上的任何地方都没有看到对您的第二个代码块的引用,这意味着它没有作为示例提供 - 但绝不建议您不应该使用它。

于 2013-11-10T21:30:39.167 回答