php - 类抽象不起作用

标签 php mysql class

我有一个类命名用户,代码如下

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/

相关文章:

c++ - 我可以在类定义中实例化当前类的新对象吗

css - 如何将一个类的边界扩展到其他类

c++ - 如何最好地让用户重新定义类方法?

php - 如何嵌套PHP代码块

php - 与 MYSQL 中的给定行相比,使用简单公式查找最接近的行?

java - 无法通过 JWS 应用程序连接到 MySQL 数据库

php - 一张表格响应,添加多个表格行

php - Jquery ajax post 将阿拉伯字符发送到 php 和 mysql 查询,例如

php - 启用安全浏览后,Facebook 会发送一个空白的签名请求

mysql - 如何连接和更改/更新表