Php 如何编辑另一个类的属性并将其返回给另一个类?

Php 如何编辑另一个类的属性并将其返回给另一个类?,php,Php,所以我的问题是:我正在用php、html5、css等(学校项目)创建一个管理系统 当用户登录时,我将其数据保存在类中。保存它们的全部目的是在以后购买时使用它们,这样我就可以保存产品ID和用户ID。但是每当我对DB进行查询时,我都会得到一个未定义的变量错误 这是我的类及其方法。一个用于保存数据,另一个用于返回数据 class profile_attributes{ public $u_data; function attributes($u_data){ $this

所以我的问题是:我正在用php、html5、css等(学校项目)创建一个管理系统

当用户登录时,我将其数据保存在类中。保存它们的全部目的是在以后购买时使用它们,这样我就可以保存产品ID和用户ID。但是每当我对DB进行查询时,我都会得到一个未定义的变量错误

这是我的类及其方法。一个用于保存数据,另一个用于返回数据

class profile_attributes{
    public $u_data;
    function attributes($u_data){
        $this->u_data=$u_data;
    }
    function attr_get(){
        return  $u_data;
    }
}
我最初如何发送参数

 $u_data = mysqli_fetch_assoc($result);
 $save_info = new profile_attributes()->attributes($u_data);
我是如何尝试得到它们的

$profile = new profile_attributes();
$loged_user = $profile->attr_get();

$user_id = $loged_user['id'];

看起来您从未定义过$u_数据。您所做的只是创建一个新的profile_属性实例,然后尝试提取未定义的$u_数据。

$u_数据未定义,必须在$this之前

class profile_attributes{
    public $u_data;
    function attributes($u_data){
        $this->u_data=$u_data;
    }
    function attr_get(){
        return  $this->u_data;
    }
}
您正在创建一个实例来设置属性,另一个实例来访问属性,请仅使用其中一个实例来访问这两个属性:

// Use the same instance to set and get atributes
$profile = new profile_attributes();
$u_data = mysqli_fetch_assoc($result);
$save_info = $profile->attributes($u_data);

$loged_user = $profile->attr_get();
$user_id = $loged_user['id'];

您正在创建
profile\u属性
类的两个独立实例。实例的属性和数据是特定于其自身的,如果使用
new class
语法创建第二个实例,则不会共享该实例的属性和数据

这里有一个你正在做的例子。请注意,实例中的数据不同:

class Foo
{
    public $data;
}

$instance1 = new Foo();
$instance1->data = array[1, 2, 3];

$instance2 = new Foo();

var_dump($instance1, $instance2);

您需要共享您创建的第一个实例,并将数据库结果保存到您想要检索这些属性的位置。

var\u dump的$loged\u user['id'是什么return?调用
attributes
方法的代码在哪里?是否正在查找会话变量?
attr\u get
应返回
$this->udata
。但正如trincot所写,您还需要确保实际设置了属性。您说过,“我将其数据保存在一个类中。保存这些数据的全部目的是在以后购买时使用它们”。即使正确实现了getter和setter,类也不是持久的。如果要在后续页面加载中使用这些信息,则必须使用数据库、会话变量或其他持久性存储。这似乎对我仍然没有帮助…:/也许您只需要在访问属性之前设置属性。我已经编辑了我的答案。因为我的属性在我的类作用域和public中,这不是使我在类中的两个方法都很常见吗?请这样想:您的类定义是一组用于构建文件柜的指令。每次执行
新建文件柜()
,都会构建一个全新的文件柜。在您的情况下,您现在有两个机柜。如果您将书籍(数据)放在一个文件柜中,它们也不会在另一个文件柜中神奇地变得可访问。
class Foo{}
只是定义了对象结构的蓝图。该类的每个实例都是一个单独的对象,每个都有自己的状态、数据等,但都具有蓝图定义的相同结构。我的实例位于单独的php文件中,第一个传递信息的人是在用户登录时,另一个是在用户购买时。然后,您需要做两件事之一:a)通过会话在PHP页面请求之间持久化数据,或B)在下单的同一页面中检索所需的数据。这两个问题都超出了您提出的问题的范围。