最近几个月,我在Java领域投入了很长的时间,而我只是重新访问PHP。在Java中,我可以创建一个对象数组并像这样访问方法:
Jam jam = new Jam(1,"strawberry","December","false");
//creates an object with an id, a flavour, a useby and an opened status
因此,如果我遍历创建一些卡纸,则可能会有类似的数组
[0] => [id => 1,"stawberry"... etc
[1] => [id => 2, "raspberry"... etc]
现在我的果酱模型可能具有类似的方法
update_opened(bool newStatus) {
this.openedStatus = newStatus;
}
所以现在我可以遍历果酱并调用方法
for(...size of array) {
if(i == 1) {
array.get(i).update_opened(true);
}
}
现在我的果酱被打开了。我可以在我的应用程序周围传递该对象,并在需要时随时访问该方法
在PHP中,这似乎没有发生。我似乎每次都需要重新创建一组新对象,例如:
array_map(function($j) use ($jams) {
$j = new jam(....);
if($j->id == 1) $j->updateOpenedStatus(true);
return $jams[$j->id] = $j;
},
$jams);
我需要这样做还是我的对象仍然以相同的方式站立?我想知道这是否是因为Java是一种编译语言,而不是像PHP这样的简单运行时样式,但是我根本不知道这是否有意义。如果有人可以对此有所了解,这将非常有用,可以帮助我更深入地了解该语言的工作原理。
(P.S。我不是真的在做基于Jam的应用程序,那样很好吃)
答案 0 :(得分:0)
您可以定义对象数组,使用foreach
循环并在集合中的每个对象上调用方法。与Java没什么不同。
$jams = array();
$jams[] = new Jam(1, "strawberry","December",false);
$jams[] = new Jam(2, "raspberry", "January", true);
foreach($jams as $jam){
if($jam->id == 1)
$jam->updateOpenedStatus(true);
}
答案 1 :(得分:0)
因为我很无聊,所以这里是一个起点(Executable Demo):
//define the jam class
class jam {
public $id;
public $flavour;
public $useby;
public $openedStatus;
public function __construct($id, $flavour, $useby, $openedStatus) {
$this->id = $id;
$this->flavour = $flavour;
$this->useby = $useby;
$this->openedStatus = $openedStatus;
}
public function updateOpenedStatus($newStatus) {
$this->openedStatus = $newStatus;
}
}
//create an array of objects with different properties
$jams[] = new jam(1, "strawberry", "december", false);
$jams[] = new jam(2, "raspberry", "november", false);
//loop the array and change the first object
foreach($jams as $jam) {
if($jam->id == 1) {
$jam->updateOpenedStatus(true);
}
}
var_dump($jams);
这产生了(注意带有id=1
的第一个对象反映了新的openedStatus=true
):
array(2) {
[0]=>
object(jam)#1 (4) {
["id"]=>
int(1)
["flavour"]=>
string(9) "stawberry"
["useby"]=>
string(8) "december"
["openedStatus"]=>
bool(true)
}
[1]=>
object(jam)#2 (4) {
["id"]=>
int(2)
["flavour"]=>
string(9) "raspberry"
["useby"]=>
string(8) "november"
["openedStatus"]=>
bool(false)
}
}
混乱在哪里?