首页 > 解决方案 > PHP - 在另一个对象的数组中设置对象属性

问题描述

我还在学习PHP,所以请原谅我的无知...

我有一个具有 3 个属性的对象,其中两个是数组。2 个数组之一是对象数组。我在设置数组中的属性和对象时遇到问题。

主对象的 var_dump 包含以下内容(我将 3 个变量分开以便于识别):

object(Blockchain)#1 (4) { 
["chain"]=> array(1) { 
    [0]=> object(Block)#2 (5) { ["timestamp"]=> string(10) "05/27/2018" ["transaction"]=> array(2) { ["amount"]=> string(1) "0" ["uid"]=> string(18) "EMG: Genesis Block" } ["previousHash"]=> string(1) "0" ["hash"]=> string(64) "9e2838eb493cc112b2d3fd37925953d25cf9fd2ba4bf7e09750f368451f2ff03" ["nonce"]=> int(0) } } 

["difficulty"]=> int(4) 

["pendingTransactions"]=> array(2) { 

    [0]=> object(Transaction)#3 (4) { 
        ["fromAddress"]=> NULL ["toAddress"]=> NULL ["amount"]=> NULL ["pendingTransactions"]=> object(stdClass)#4 (1) { ["tranaction"]=> object(stdClass)#5 (3) { ["fromAddress"]=> string(9) "address-1" ["toAddress"]=> string(9) "address-2" ["amount"]=> int(100) } } } 

    [1]=> object(Transaction)#6 (4) { 
        ["fromAddress"]=> NULL ["toAddress"]=> NULL ["amount"]=> NULL ["pendingTransactions"]=> object(stdClass)#7 (1) { ["tranaction"]=> object(stdClass)#8 (3) { ["fromAddress"]=> string(9) "address-2" ["toAddress"]=> string(9) "address-1" ["amount"]=> int(25) } } } } ["miningReward"]=> int(100) } 

我正在尝试在作为对象一部分的数组中设置fromAddress属性。pendingTransactionsTransactions

我尝试编写的代码如下:

class Transaction {
public $fromAddress = "";
public $toAddress = "";
public $amount = "";

public function __construct ($fromAddress, $toAddress, $amount) {
    $this->pendingTransactions->{Tranaction}->fromAddress = $fromAddress;
    $this->pendingTransactions->{Tranaction}->toAddress = $toAddress;
    $this->pendingTransactions->{Tranaction}->amount = $amount;
}

public function __toString() {
    return $this->pendingTransactions->tranaction->fromAddress . ", " . $this->pendingTransactions->tranaction->toAddress . ", " . $this->pendingTransactions->tranaction->amount;
}

}

任何帮助将不胜感激。

已阅读以下帖子:

PHP - 获取数组中对象的 属性 PHP - 获取数组中对象的属性?@clerksx @桑普森

访问 PHP 数组对象受保护的属性 访问 PHP 数组对象受保护的属性 @Aayush @j0k

Php:似乎无法访问对象中的数组属性 Php:似乎无法访问对象中的数组属性@OllyBarca @Tobias Golbs 编辑:fromAddress 拼写错误 - 之前:fromAddtress

标签: phparrays

解决方案


我认为你有一些糟糕的设计。你不能或者我会说收集对象本身是个坏主意,尤其是使用 coтstructor。

我建议你上两节课

或仅在外面的某个数组中收集物品

或存储不是相同的类,而是 StdClass 或数组作为事务。

解决方案#1:

class Transaction {
  public $fromAddress = "";
  public $toAddress = "";
  public $amount = "";

  public function __construct ($fromAddress, $toAddress, $amount) {
    $this->fromAddress = $fromAddress;
    $this->toAddress = $toAddress;
    $this->amount = $amount;
  }

  public function __toString() {
    return $this->fromAddress . ", " . 
           $this->toAddress . ", " . 
           $this->amount;
  }
}
class TransactionList {
  public $pendingTransactions = [];
  public function __construct ($fromAddress, $toAddress, $amount) {
     $t = new Transaction($fromAddress, $toAddress, $amount);
     $this->pendingTransactions[]=$t;
  }
  public function addTransaction(Transaction $transaction) {
     $this->pendingTransactions[]=$transaction;
  }
}

$tList = new TransactionList('from addr', 'to addr', 'amount');
$tList->addTransaction(new Transaction('from addr 2', 'to addr 2', 'amount2'));
echo ''.$tList->pendingTransactions[1];

解决方案#2:

class Transaction {
  public $fromAddress = "";
  public $toAddress = "";
  public $amount = "";

  public function __construct ($fromAddress, $toAddress, $amount) {
    $this->fromAddress = $fromAddress;
    $this->toAddress = $toAddress;
    $this->amount = $amount;
  }
  public function __toString() {
    return $this->fromAddress . ", " . 
       $this->toAddress . ", " . 
       $this->amount;
  }
}
$tList = [];
$tList[] = new Transaction('from addr', 'to addr', 'amount');
$tList[] = new Transaction('from addr 2', 'to addr 2', 'amount2');
echo ''.$tList[1];

解决方案#3:

class TransactionList {
  public $pendingTransactions = [];
  public function __construct ($fromAddress, $toAddress, $amount) {
     $this->addTransaction($fromAddress, $toAddress, $amount);
  }
  public function addTransaction($fromAddress, $toAddress, $amount) {
     $t = new StdClass();
     $t->fromAddress = $fromAddress;
     $t->toAddress = $toAddress;
     $t->amount = $amount;
     $this->pendingTransactions[]=$t;
  }
}

$tList = new TransactionList('from addr', 'to addr', 'amount');
$tList->addTransaction('from addr 2', 'to addr 2', 'amount2');
echo ''.$tList->pendingTransactions[1]->toAddress;

推荐阅读