OOP-PHP-get';变量中没有值
我有点困惑,我是OOP PHP新手,所以无法阻止我的函数获取空值 我有一个index.php文件,其中有:OOP-PHP-get';变量中没有值,php,oop,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';
<?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();
?>
据我所知,这个想法是
在index.php文件中,我声明了User类的变量,这些信息被发送到User.php,我还通过User::class从databaseobject类调用create()函数,变量中的信息将被发送到create函数
在数据库中,我得到了空白字段
我试图对user.php中的变量进行硬编码——一切都正常(首先我认为我没有从user.php获取数据)
当它工作时,我想可能我没有从index.php到user.php获取数据,但结果是,当我编写函数traceStatement()时,我在index.php文件中获取了数据
所以也许这里有人知道我的问题是什么,我做错了什么?而不是
User::create()
,您应该使用$user->create()
您的create()
方法应该更改为:($这在OOP世界中非常重要)
}而不是
用户::创建()
,您应该使用$user->create()
您的create()
方法应该更改为:($这在OOP世界中非常重要)
}问题是您正在从静态上下文调用
create()
方法。如果希望属性在方法中可用,则需要像这样调用它:$User->create()
问题是您正在从静态上下文调用create()
方法。如果希望属性在方法中可用,则需要如下调用它:$User->create()
数据库对象。create(0)函数包含:
$class=新的$calledClass
这将创建一个尚未初始化的新用户对象。
=>空值
在index.php中,您应该调用:
$user->create();
(而不是用户::创建()==>静态)
在databaseObject中,您可以只使用$this->tableName,…而不是所有$calledClass内容。
我不明白您为什么希望它是静态的。DataBaseObject.create(0)函数包含:
$class=新的$calledClass
这将创建一个尚未初始化的新用户对象。
=>空值
在index.php中,您应该调用:
$user->create();
(而不是用户::创建()==>静态)
在databaseObject中,您可以只使用$this->tableName,…而不是所有$calledClass内容。
我不明白您为什么希望它是静态的。您没有收到任何错误吗?它看起来不像
create()
是一个静态函数。总的来说,最好使用getter/setter函数,而不是直接访问属性。请注意,这是一个好方法!您调用的create函数将始终创建一个新用户。新用户的值为空,这就是为什么它被空输入数据库的原因。从我在代码中看到的情况来看,您不能绕过这个问题。看起来像是糟糕的设计……为什么create
函数是静态的?您没有收到任何错误吗?它看起来不像create()
是一个静态函数。总的来说,最好使用getter/setter函数,而不是直接访问属性。请注意,这是一个好方法!您调用的create函数将始终创建一个新用户。新用户的值为空,这就是为什么它被空输入数据库的原因。从我在代码中看到的情况来看,您不能绕过这个问题。看起来设计很糟糕……为什么create
函数是静态的?+1:我也明白为什么会出现空值。你知道,我使用calledClass是因为DatabaseObject由project.php类、user.php类扩展,而get_称为_class()我可以让函数确定从何处调用它,以便放置相关的表名。当我这样做时,$这个函数地址是DatabaseObject而不是User类..那么..也许你可以建议我任何解决方法???我想说+1:这也是我看到的为什么空值出现在那里的原因。你知道,我使用calledClass是因为DatabaseObject由project.php类、user.php类和get_扩展,称为_class()我可以让函数确定从何处调用它,以便放置相关的表名。当我这样做时,$这个函数地址是DatabaseObject而不是User类..那么..也许你可以建议我任何解决方法???我想在这种情况下,我应该将create函数移到User.php文件,我将无法从DatabaseObject c调用它lass…我说的对吗?@Mikey如果你想从DatabaseObject类调用它,你应该把$user传递给create()
,而不是创建一个新的对象。如果是self::$tablename这个函数是在处理这个类本身,但我是从一个子类调用这个函数。你可以做一些类似$user->getTableName()的事情
我想调用create()这是用户提供的DatabaseObject中的内容,这就是为什么我面临self和$this的问题。也许我没有正确使用静态函数或公共非静态函数,也许你可以提供我的任何解决方法?我想在这种情况下,我应该将create函数移到User.php文件中,我将无法从DatabaseObject类调用它…对吗@Mikey如果你想从DatabaseObject类调用它,你应该把$user传递给create()
,而不是创建一个新的对象。如果是self::$tablename,这个函数是对这个类本身进行寻址的,但我是从一个子类调用这个函数。你可以做一些类似于$user->getTableName()
我想调用create()这是用户提供的DatabaseObject中的内容,这就是为什么我面临self和$this的问题。也许我没有正确使用静态函数或公共非静态函数,也许您可以为我提供任何解决方法?
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;
}
$user->create();