我有一个类命名用户,代码如下
require_once(LIB_PATH.DS.'database.php');
class User extends DatabaseObject {
protected static $table_name="users";
public $id;
public $username;
public $password;
public $first_name;
public $last_name;
}
我从 DatabaseObject 类扩展了这个 User 类,在该类中我已经为数据库 CRUD 提供了通用方法,此时我刚刚提出了一个 Create 方法,下面是我的 DatabaseObject 类
require_once(LIB_PATH.DS.'database.php');
class DatabaseObject {
public static function attributes() {
$class_name = get_called_class();
$object = new $class_name;
return get_object_vars($object);
}
public static function sanitized_attributes() {
global $database;
$clean_attributes = array();
foreach(static::attributes() as $key => $value){
$clean_attributes[$key] = $database->escape_value($value);
}
return $clean_attributes;
}
public static function create() {
global $database;
$attributes = static::sanitized_attributes();
$sql = "INSERT INTO ".static::$table_name." (";
$sql .= join(", ", array_keys($attributes));
$sql .= ") VALUES ('";
$sql .= join("', '", array_values($attributes));
$sql .= "')";
if($database->query($sql)) {
return $sql;
} else {
return false;
}
}
}
当我从 test.php 运行测试以检查创建是否有效时 使用此代码
$user = new User();
$user->username = "johnsmith";
$user->password = "abcd12345";
$user->first_name = "John";
$user->last_name = "Smith";
echo User::create();
它只是返回带有空值的查询
INSERT INTO users
(id, username, password, first_name, last_name) VALUES ('', '', '', '', '')
当我检查 phpmyadmin 时,插入了一行,但值为空,我犯的错误是什么,请帮忙
问候
塔波
最佳答案
您的 create()
函数是静态
,因此它与您正在处理的实例没有任何联系。
然后,您的 sanitized_attributes()
创建类 [$object = new $class_name;
] 的不相关实例,并迭代其属性,这些属性根据定义为空.
顺便说一下,用户准备的关于困惑字符串连接操作的语句:PDO
正在等你!
关于php - 类抽象不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24653484/