像Java

时间:2019-05-08 19:22:31

标签: java php oop object

最近几个月,我在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的应用程序,那样很好吃)

2 个答案:

答案 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)
  }
}

混乱在哪里?