【问题标题】:How to dynamically assign values from associative array to properties如何将关联数组中的值动态分配给属性
【发布时间】:2014-05-18 22:15:43
【问题描述】:

我正在尝试将关联数组中的键和值分配给类属性。下面的代码是我想出的。当我尝试使用 $user 对象时出现错误。数组可能来自正在运行的数据库查询(PDO)。

我有什么办法可以完成这项工作吗?

<?php

class assoctoprop {

public $fname;
public $lname;
public $email;

public function assign(){
    $user = new assoctoprop;
    $array = array("fname"=>"firstname", "lname"=>"lastname", "email"=>"my@email.com" );
    foreach($array as $key=>$value){
    $user->$key = $value;
    }
    return $user;
}
}
echo $user->fname."<br/>";
echo $user->lname."<br/>";
echo $user->email."<br/>";
?>

这行得通

<?php

class assoctoprop {

public $fname;
public $lname;
public $email;

/*public function assign(){
    $user = new assoctoprop;
    $array = array("fname"=>"firstname", "lname"=>"lastname", "email"=>"my@email.com" );
    foreach($array as $key=>$value){
    $user->$key = $value;
    }
    return $user;
}*/
}
          $user = new assoctoprop;
    $array = array("fname"=>"firstname", "lname"=>"lastname", "email"=>"my@email.com" );
    foreach($array as $key=>$value){
    $user->$key = $value;
    }
echo $user->fname;
echo $user->lname;
echo $user->email;
?>

但我的问题是,我想把整个过程推入一个方法中,这样我就可以在我需要的时候使用它,而不必每次都重新编写过程

【问题讨论】:

标签: php arrays oop


【解决方案1】:

除非我误解了你的问题,否则你可以通过将数组上的类型设置为对象来完成同样的事情。

$object = (object)array("fname" => "firstname", "lname" => "lastname", "email" => "my@email.com");

【讨论】:

    【解决方案2】:

    assign() 在我看来现在应该在课堂之外。

    您可以从内部实例化一个类,但在这种情况下您不需要这样做。只需使用$this 从内部引用该类:

    class assoctoprop {
    
        public $fname;
        public $lname;
        public $email;
    
        public function assign(){
            $array = array("fname"=>"firstname", "lname"=>"lastname", "email"=>"my@email.com" );
            foreach($array as $key=>$value){
                $this->$key = $value;
            }
        }
    
    }
    
    $user = new assoctoprop;
    $user->assign();
    
    echo $user->fname."<br/>";
    echo $user->lname."<br/>";
    echo $user->email."<br/>";
    

    您还应该考虑将该数组传递给函数而不是在类中定义它,并且您应该进行一些基本的错误检查以确保在设置属性之前存在,等等。

    编辑:你也可以把你的assign()方法变成class's constructor,所以它会被立即调用:

    class assoctoprop {
        public $fname;
        public $lname;
        public $email;
    
        function __construct($array){
            foreach($array as $key=>$value){
                $this->$key = $value;
            }
        }    
    }
    
    $array = array("fname"=>"firstname", "lname"=>"lastname", "email"=>"my@email.com" );
    $user = new assoctoprop($array);
    
    echo $user->fname."<br/>";
    echo $user->lname."<br/>";
    echo $user->email."<br/>";
    

    编辑 2:here's an interesting post 关于使用可能尚不存在的类属性(以防您想使其动态化)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-11-16
      • 2022-01-20
      • 2013-12-18
      • 2019-03-20
      • 1970-01-01
      • 2022-01-26
      • 2018-09-08
      • 2016-03-09
      相关资源
      最近更新 更多