【问题标题】:How to assign an array's key value pairs to object's attribute value pairs in PHP如何在 PHP 中将数组键值对分配给对象属性值对
【发布时间】:2015-07-31 19:55:46
【问题描述】:

我想知道如何在 PHP 中将数组的键值对分配给对象的属性值对。这就是我正在尝试的。我正在使用构造函数通过在创建对象时通过参数发送所有值 frm 数组来设置所有属性。但我相信应该有一种更简洁有效的方法来做到这一点。如果有人知道,请分享。

function display_stock($connection)
{
 $query = "SELECT * FROM `stock` ";
 $result= mysqli_query($connection, $query);
 $stock = array();
 for ($i = 0;$row= mysqli_fetch_assoc($result); $i++)
 {
    $stock[$i] = new stock( $row);
 }
return $stock;
}

这是构造函数的代码

public function __construct($l_code, $date, $all_lengths_size, $overall_cost)
{
    $this->l_code=$l_code;
    $this->date=$date;
    $this->all_lengths_size=$all_lengths_size;
    $this->overall_cost=$overall_cost;
}

请注意,我必须返回一个对象数组,所以在这里只传递 $row 是不可行的。

【问题讨论】:

  • 不是真的,除非你想传入数组本身,new sale($row) 并让构造函数取出它需要的任何位。
  • 这可能是一种更好的方法,因为这个方法看起来很长!
  • 我同意@MarcB 的方法。如果你的行也改变了怎么办?您不想更改这个长对象声明及其构造函数中的代码。

标签: php arrays object assign


【解决方案1】:

您可以使用相应地设置属性的构造函数,如下所示:

public function __construct($row){
 foreach ($row as $prop=>$value){
  $this->$prop=$value;
 }
}

或者你可以像这样只设置你感兴趣的属性

public function __construct($row){
  $propertiesilike=array("customer_name", "p_type");
 foreach ($propertiesilike as $prop){
  if(isset($row[$prop])){
   $this->$prop=$row[$prop];
  }
 }
}

【讨论】:

  • 第一个很酷。但是在第二个中,您假设 $value 来自哪里?它的未定义!我相信你想写这个 $this->$prop=$row[$prop];
  • 是的,你是对的。它应该是 $this->$prop=$row[$prop] - 已编辑
【解决方案2】:

另一个选项,假设查询返回应该填充对象的列,您可以使用mysqli_fetch_object()

while($sale[] = mysqli_fetch_object($result, 'sale')) {}

这会在调用__construct() 之前填充属性。还有第三个参数是给构造函数传参的。

【讨论】:

  • 小改进:sale::class'sale' 更好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-12-08
  • 2015-05-02
  • 1970-01-01
  • 2022-11-10
  • 2021-12-07
  • 2016-05-10
  • 1970-01-01
相关资源
最近更新 更多