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的类的例子?
答案 0 :(得分:2)
简单地说,似乎SQLite3::open
和SQLite3::query
都不是静态方法,因此以静态方式访问它们是不正确的。相反,它们是实例成员,您需要一个实例来访问它们。上面和我想象的参考示例也是为了说明如何创建可重用的数据库驱动程序(例如DB
对象,扩展SQLite3
),以便您不必总是告诉它要打开哪个数据库文件。
但是,如果您不希望扩展SQLite3
类,则以下内容似乎同样有效,并为您提供与第二个示例所暗示的相似的语法(请参阅:{ {3}}):
$db = new SQLite3('database.db');
$db->exec("CREATE TABLE derp(asdf STRING)");
$db->query("SELECT asdf FROM derp");
答案 1 :(得分:0)
简单的答案是,他们不会说“做这个,不是这个。”
他们展示了一个例子(你的第一个代码块)。我没有在页面的任何地方看到你的第二个代码块的引用,所以这意味着它没有作为一个例子提供 - 但它绝不建议你不要使用它。