我正在構建一個簡單的MVC框架,並堅持如何設置對象。初始化PHP MVC上的對象 - 查看之前或期間
TL; DR:是否更好地在視圖之前或在視圖渲染過程中初始化對象?
實施例:
CONTROLLER
<?php
class Controller {
public function __construct() {
$user = new User();
}
}
?>
對象用戶
<?php
class User {
public function __construct() {
$this->setFriends($arg);
}
public function setFriends($arg) {}
public function getFriends() {}
}
?>
OBJECT朋友
<?php
class Friend {
.. properties ..
.. methods() ..
}
?>
VIEW
<?php
foreach($user->getFriends() as $friend){
.. $friend is a Friend Object already ..
.. html...
}
?>
問題:是更好的初始化上setFriends方法好友對象(加載視圖之前 - 記住,有很多的朋友),或在getFriends方法(負載視圖)?
public function setFriends($arg) {
foreach($arg as $item)
$this->friends[] = new Friend($item)
}
OR
public function getFriends() {
$tmp = array();
foreach($this->friends as &friend)
$tmp[] = new Friend($friend)
return $tmp;
}
我想,在第一種情況下,內存會被預先消費。而第二種情況,只有在視圖調用getFriends時,朋友對象纔會初始化。
這似乎不是任何一種情況。如果您獲得新數據,則需要調用分配新對象的setFriends。什麼是'$ this-> friends',爲什麼你要創建一個Friend對象的臨時數組來返回?我們需要更多關於代碼使用情況的信息。調用get/set的預期用例是什麼?他們打了多少次?等等。在OOP中,一旦有數據初始化它們,通常會創建對象。 –
這個實現的一般建議是通過查看(在foreach中)初始化對象(我想從模型/控制器/新對象函數中解耦視圖,像另一個人一樣構建視圖..他不想需要初始化朋友對象(已經通過)...我不知道我是否清楚(對不起,我的英語) – brnmonteiro
然後,對於你的get/set函數,View並不是一個好的地方,它們屬於Controller ,從而將View和Friend對象的創建分離開來,注意,getFriends應該返回'$ this-> friends'並且避免複製到一起,除非你把函數改成&getFriends() ' –