我有点困惑,我是OOP PHP的新手,所以无法阻止我的函数获取空值。
我有一个index.php文件,我有:
<?php
require_once('../../includes/functions.php');
require_once('../../includes/database.php');
require_once('../../includes/user.php');
$user = new User();
$user->username = 'test';
$user->password = '1234';
$user->firstname = 'test1';
$user->lastname = 'test2';
User::create();
// $user->traceStatement();
?>
我有一个扩展Databaseobject类的User类: user.php的:
<?php
require_once('database.php');
class User extends DatabaseObject {
protected static $tableName = 'users';
protected static $tableID = 'id';
public $id;
public $username;
public $password;
public $firstname;
public $lastname;
public function traceStatement() {
echo $this->username;
echo $this->password;
echo $this->firstname;
echo $this->lastname;
}
}
?>
这是一个来自DatabaseObject类的创建函数片段:
public function create() {
global $database;
$calledClass = get_called_class();
$class = new $calledClass;
$sql = "INSERT INTO ".$calledClass::$tableName." (username, password, firstname, lastname) VALUES ('";
$sql .= $database->escapeValue($class->username)."', '";
$sql .= $database->escapeValue($class->password)."', '";
$sql .= $database->escapeValue($class->firstname)."', '";
$sql .= $database->escapeValue($class->lastname);
$sql .= "')";
if($database->query($sql)) {
$cass->id = $database->insert_id();
return true;
}else {
return false;
}
}
据我所知,这个想法是
在我的index.php文件上我声明了User类的varibales,这些信息被发送到user.php,我也通过User :: class从databaseobject类调用create()函数,我的变量里面的信息将被发送以创建功能。
在数据库中我得到空白字段。
我试图对user.php中的变量进行硬编码 - 一切正常(首先我以为我没有从user.php获取数据)。
当它工作时,我想也许我不是从index.php到user.php的gettind数据,但事实证明,当我编写函数traceStatement()时 - 我收回了index.php文件中的数据... < / p>
所以也许有人在这里知道我的问题是什么,我做错了什么?
答案 0 :(得分:3)
而不是User::create();
,您应该使用$user->create()
。
您的create()
方法应更改为:( $ this 在OOP世界中非常重要)
public function create() {
global $database;
$sql = "INSERT INTO ".static::$tableName." (username, password, firstname, lastname) VALUES ('";
$sql .= $database->escapeValue($this->username)."', '";
$sql .= $database->escapeValue($this->password)."', '";
$sql .= $database->escapeValue($this->firstname)."', '";
$sql .= $database->escapeValue($this->lastname);
$sql .= "')";
if($database->query($sql)) {
$this->id = $database->insert_id();
return true;
}else {
return false;
}
}
答案 1 :(得分:2)
DataBaseObject.create(0函数包含: $ class = new $ calledClass;
这将创建一个尚未初始化的新User对象。 ==&GT;空值。
在index.php中,您应该调用:
$user->create();
(而不是User :: create()==&gt;静态)
在databaseObject中,你可以使用$ this-&gt; tableName,..而不是所有$ calledClass的东西。 我不明白你为什么要这是静态的。
答案 2 :(得分:1)
问题是你是从静态上下文调用create()
方法。如果您希望属性在方法中可用,则需要像下面这样调用它:$User->create()
。