v2.5.2
Giriş yap

PHP(Classes) Sınıflarda model listesi yapılabilir mi?

manlyak
553 defa görüntülendi

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

Cevap yaz
Cevaplar (2)
makifgokce
1122 gün önce

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);
manlyak
1122 gün önce

Teşekkürler, benzeri bir yöntemle çözüm buldum. Çözümü ve kaynakçayı konuya ekledim.