Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
OOP-PHP-get';变量中没有值_Php_Oop - Fatal编程技术网

OOP-PHP-get';变量中没有值

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';

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


?>
据我所知,这个想法是

在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();