Php 业务逻辑类,使用字典而不是属性

Php 业务逻辑类,使用字典而不是属性,php,properties,business-logic,Php,Properties,Business Logic,我有一个业务逻辑类,它保存用户的所有数据。该类应该能够从mysql数据库中插入/获取/更新/删除用户 我开始创建所有属性,如用户名、密码、电子邮件等。。。但是,我意识到拥有一个包含所有属性的单一字典更方便,因为我经常需要将用户对象与字典或字符串协调,并且需要保留键值对。我是这样写的: class User { public $parameters; public function __construct($parameters) { $this->

我有一个业务逻辑类,它保存用户的所有数据。该类应该能够从mysql数据库中插入/获取/更新/删除用户

我开始创建所有属性,如用户名、密码、电子邮件等。。。但是,我意识到拥有一个包含所有属性的单一字典更方便,因为我经常需要将用户对象与字典或字符串协调,并且需要保留键值对。我是这样写的:

class User {
    public $parameters;
    public function __construct($parameters) 
    {
        $this->parameters= $parameters;
    }
    public function __get($property) {
        return $parameters[$property];
    }
    ...
}
但它并没有像预期的那样起作用。我想要的行为是:

$user= new User($params);
echo user.username;  // Searches in the parameters for the field "username"
有可能这样做吗

编辑

使用$user->username,我得到:

注意:未定义变量:第10行/Library/WebServer/Documents/Cinema/blogics/user.php中的参数


第10行是用户获取方法。

您应该将
用户名
声明为
变量

  public $username;
然后,您可以使用用户对象作为

   $user->username;
有关使用PHP的oops的更多详细信息,可以查看此链接

您应该将
用户名
声明为
变量

  public $username;
然后,您可以使用用户对象作为

   $user->username;
有关使用PHP的oops的更多详细信息,可以查看此链接

您应该将
用户名
声明为
变量

  public $username;
然后,您可以使用用户对象作为

   $user->username;
有关使用PHP的oops的更多详细信息,可以查看此链接

您应该将
用户名
声明为
变量

  public $username;
然后,您可以使用用户对象作为

   $user->username;
有关使用PHP的oops的更多详细信息,可以查看此链接

  • 在getter中使用
    $this->parameters[$property]
    而不是
    $parameters[$property]
  • 称之为
    $user->username
  • $parameters
    应该是私有的,以保持封装
在代码中

class User {
    private $parameters; // should be private (encapsulation)
    public function __construct($parameters)
    {
        $this->parameters= $parameters;
    }
    public function __get($property) {
        return $this->parameters[$property]; // instead of $parameters[$property]
    }
}

$params = array(
  "username" => "John Doe",
  "age" => 33
);

$user = new User($params);
echo $user->username; // -> instead of .
  • 在getter中使用
    $this->parameters[$property]
    而不是
    $parameters[$property]
  • 称之为
    $user->username
  • $parameters
    应该是私有的,以保持封装
在代码中

class User {
    private $parameters; // should be private (encapsulation)
    public function __construct($parameters)
    {
        $this->parameters= $parameters;
    }
    public function __get($property) {
        return $this->parameters[$property]; // instead of $parameters[$property]
    }
}

$params = array(
  "username" => "John Doe",
  "age" => 33
);

$user = new User($params);
echo $user->username; // -> instead of .
  • 在getter中使用
    $this->parameters[$property]
    而不是
    $parameters[$property]
  • 称之为
    $user->username
  • $parameters
    应该是私有的,以保持封装
在代码中

class User {
    private $parameters; // should be private (encapsulation)
    public function __construct($parameters)
    {
        $this->parameters= $parameters;
    }
    public function __get($property) {
        return $this->parameters[$property]; // instead of $parameters[$property]
    }
}

$params = array(
  "username" => "John Doe",
  "age" => 33
);

$user = new User($params);
echo $user->username; // -> instead of .
  • 在getter中使用
    $this->parameters[$property]
    而不是
    $parameters[$property]
  • 称之为
    $user->username
  • $parameters
    应该是私有的,以保持封装
在代码中

class User {
    private $parameters; // should be private (encapsulation)
    public function __construct($parameters)
    {
        $this->parameters= $parameters;
    }
    public function __get($property) {
        return $this->parameters[$property]; // instead of $parameters[$property]
    }
}

$params = array(
  "username" => "John Doe",
  "age" => 33
);

$user = new User($params);
echo $user->username; // -> instead of .

如果您使用对象运算符
->
而不是串联运算符
则有帮助如果您使用对象运算符
->
而不是串联运算符
则有帮助如果您使用对象运算符
->
而不是串联运算符
则有帮助如果您使用对象运算符
->
而不是连接运算符
即使这种方式不起作用,也不能识别为属性。即使这种方式不起作用,也不能识别为属性。即使这种方式不起作用,也不能识别为属性。即使这种方式不起作用,也不能识别为属性。“private”$parameters是一个很好的观点,因为您使用的是getter和setter“private”$parameters是一个很好的观点,因为您使用的是getter和setter“private”$parameters是一个很好的观点,因为您使用的是getter和setter