PHP(Classes) Sınıflarda model listesi yapılabilir mi?
Selam,
PHP içinde modeller oluşturdum. Örneğin bir sınıfım var ve kullanıcıların listesini tutmak istiyorum.
UserList sınıfımın içerisinde userlar(UserModel)ın bi listesi olacak;
private UserModel $user;
değil
private List<UserModel> $users;
gibi tutmak istiyorum aslında. Örnek;
<?php
class UserList {
private bool result;
private UserModel $user;
}
<?php
class UserModel {
private int $id;
private String $username;
private String $email;
}
<?php
$userListModel = new UserList();
foreach ($userlist-> as $user){
$userModel = new UserModel();
$userModel-> setId($userid);
$userModel-> setUsername($username);
$userModel-> setEmail($email);
$userListModel->setUser($userModel);
}
son olarak userListesini ekrana bastığımda sadece son eklenen kullanıcıyı görüyorum tahmin edeceğiniz gibi...
Burdaki UserList Modelinde nasıl UserModelin bir listesini tutabilirim?
Java üzerinden örnek verip daha anlaşılır kılayım gerekirse,
class UserList {
private bool result;
private List<UserModel> $user;
}
benzeri bir şekilde yapıp, list.add($userModel) diyerek ekliyoruz. Nasıl bir yol izleyebilirim?
<hr style="border: 1px solid #ddd; margin-bottom: 10px">
(düzenleme)
Şöyle bir çözüm buldum;
<?php
class UserListResponseModel {
private bool $result;
private UserListModel $users;
}
class UserListModel {
private array $list;
public function __construct(UserModel ...$list)
{
$this->list = $list;
}
public function addUser(UserModel $user){
$this->list = [...$this->list, $user];
}
public function getUsers(){
print_r($this->list);
}
}
<?php
$response = new UserListResponseModel();
$userList = new UserListModel();
foreach($users as $user){
$user = new UserModel();
$userList->addUser($user);
}
$userList->getUsers();
$response->setResult(true);
$response->setUsers($userList);
Kaynakça: https://stackoverflow.com/questions/42200769/how-to-create-list-of-objects-in-php
Soru hatalı mı? 👎
Eğer sorunun kurallara aykırı olduğunu düşünüyorsanız lütfen bize bildirin!
Cevaplar (2)
phpde List<T>
sınıfı yok bunun yerine array kullanmalısın.
class UserModel {
private int $id;
private String $username;
private String $email;
public function __construct($id, $username, $email){
$this->id = $id;
$this->username = $username;
$this->email = $email;
}
}
class UserList {
protected $users = [];
public function __construct(UserModel ...$list){
$this->users = $list;
}
}
$users = [];
for($i = 0; $i < 10; $i++){
$users[] = new UserModel($i, $i * 2, $i * 10);
}
$userList = new UserList(...$users);
print_r($userList);