关于SQLite3,我为什么要做 PHP.net 告诉我的事情


In regards to SQLite3, why should I do what PHP.net tells me to?

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的类的例子?

简单地说,SQLite3::openSQLite3::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");

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

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