【问题标题】:Assign multiple parameters to properties in PHP在 PHP 中为属性分配多个参数
【发布时间】:2012-12-28 04:13:52
【问题描述】:

我有一个这样的类定义:

class User{
    public $first;
    public $last;
    public $email;
    public $guid;
    public $website;
    public $bio;
    public $picture;
    public $gender;
    ...
}

还有一个构造函数,它从工厂函数中获取值并将它们放入类中,如下所示:

public function __construct($guid, $first , $last,$email, $bio, $picture, $gender) {
    $this->guid = $guid;
    $this->first = $first;
    $this->last = $last;
    $this->email = $email;
            ...
}

是否有一种简单的方法可以自动分配所有这些变量? 或者我可以使用带有 PHP 参数函数的 for 遍历它们吗?

【问题讨论】:

    标签: php class constructor


    【解决方案1】:

    在这种情况下应该更简单:

    class User{
    
        public function __construct($params) {//params is array('first' => 'hello', 'last' => 'hi', 'email'=>'hellohi@hi.com')
            foreach ($params as $key => $value)
            {
                $this->$key = $value;
            }
        }
    }
    

    然后您可以通过以下方式访问属性:

    $params = array('first' => 'hello', 'last' => 'hi', 'email'=>'hellohi@hi.com');
    $user = new User($params);
    echo $user->first;
    

    【讨论】:

    • 这不会很好,因为我希望能够访问类之外的属性。我可以使用我原来的方法,但我想知道是否有更有效的方法。
    • 属性可以通过 $params 数组访问,例如 echo $obj->params['first'];
    • 是的,我知道,但我宁愿先使用 $obj->。如果没有人可以回答这个问题,我还不如关闭这个帖子,并使用原始(虽然冗长)的方式来做。
    【解决方案2】:
    <?php
    
    class User {
    
        public $first;
        public $last;
        public $email;
        public $guid;
        public $website;
        public $bio;
        public $picture;
        public $gender;
    
    
        public function __construct($params) { // Same params array from previous answer.
    
            foreach ($params as $key => $value) {
    
                $this->$key = $value;
            }
    
        }
    }
    
    ?>
    

    【讨论】:

    • 我仍然认为必须有一些更简单的东西......一些隐藏在 PHP 中的方法就是为了这种类型的东西。
    • 如果你发现更简单的东西,贴在这里,我们都很好奇! :)
    • 有一个叫做func_get_args的函数可以用来获取传递给函数的所有参数,作为一个数组,但它不是一个关联数组。它只是返回一个编号数组,其中的参数按传递的顺序排列。
    • 实际上,这可能会起作用,因为该函数以特定顺序获取这些参数。我只是不明白如何将属性用作数值数组。
    • 你不能。你需要使用他们的名字。
    【解决方案3】:

    按照 Simon Germain 的建议使用 func_get_args 并使用您得到的列表函数:

    <?php 
    
    class Test{
    
        var $x, $y, $z;
    
        function __construct($x, $y, $z){
             list($this->x, $this->y, $this->z) = func_get_args();
        }
     }
    

    我不相信它可以用更短的方式完成。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-20
      • 2011-11-26
      • 2014-08-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多