OOP PHP - 变量没有价值

时间:2011-09-16 12:17:41

标签: php oop

我有点困惑,我是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>

所以也许有人在这里知道我的问题是什么,我做错了什么?

3 个答案:

答案 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()