[英]Calling static function returns NULL if object is not instanced? PHP OOP
问候好人,
我最近遇到了一些 OOP 问题。 首先,我希望从头开始创建 CRUD Db 类。 这是一个代码:
class Database{
public static $link;
public $message;
public function __construct () {
try {
self::$link = mysqli_connect(HOST, USER, PASS, DB);
if (!self::$link) {
echo self::$link->error;
}
} catch (Exception $e) {
die(" Failed connecting to DB") ;
}
}
public static function query($SQL){
return self::$link->query($SQL);
}
public static function select($table, array $columns){
$columns=implode(",",$columns);
$result=self::query("SELECT $columns FROM $table");
return self::$link->fetch($result);
}
}
所以问题是这样的:
如果我像这样调用我的静态选择函数:
Database::select('users', array('username'=>'user'));
它返回:致命错误:在 .. 中的非对象上调用成员函数 query()如果我像这样调试连接: var_dump(Database::$link)
它返回 NULL 但是如果我放置 "$db = new数据库();” 在那条线以上,它有效吗?
谁能告诉我我做错了什么?
谢谢!
您正在调用静态方法。 因此,该对象将不会被实例化。 因此,不会调用__construct()
方法。 这意味着不会填充$link
属性。
无论您做什么,您都需要连接到您的数据库。 您可以调用一个静态方法connect()
它将连接到数据库并填充$link
,或者确保在每个需要连接的方法中建立连接:
public static function connect()
{
try {
self::$link = mysqli_connect(HOST, USER, PASS, DB);
if (!self::$link) {
echo self::$link->error;
}
} catch (Exception $e) {
die(" Failed connecting to DB") ;
}
}
public function select(SQL)
{
if (!static::$link) {
static::connect();
}
// your stuff
}
这是一件好事,你想学习。 在处理这样的特定项目之前,您需要熟悉 OOP:构造函数/析构函数、访问器、修改器、静态方法等。这很重要,因为它是您接下来要做的所有事情的基础。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.