php - 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
属性。pendingTransactions
Transactions
我尝试编写的代码如下:
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
解决方案
我认为你有一些糟糕的设计。你不能或者我会说收集对象本身是个坏主意,尤其是使用 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;
推荐阅读
- javascript - 如果用于 javascript 中的简单数学方程,eval() 是否有害?
- android - android studio log errr Places API for Android 似乎没有为您的应用启用。它打开和关闭
- javascript - 如何在 Javascript 迭代器中查看下一个值
- java - JavaFX BorderPane 布局(拉伸左右窗格)
- asp.net-core - 使用 Kudu 构建服务部署 asp.net 核心应用程序时出现 UnauthorizedAccessException
- python - 最短距离两指打字问题的动态规划解
- java - 是否可以将子类的实例分配给超类的变量?
- python - 预期 float32,得到
我正在尝试构建一个函数来执行损失优化,我正在使用 Adam 优化器,其学习率将在课程本身中传递。但是,我被建议使用 clip_by_norm 函数应用剪裁来消除爆炸梯度。
def perform_
- c# - 在 foreach 循环之前检查员工姓名是否在列表中
- node.js - Google App Engine:为 React Production Build 设置环境变量