2011-05-24 2 views
3

У меня есть модель пользователей, которая имеет много свойств, такие как first_name, last_name, электронная почта, адрес ADDRESS2 ... и т.д.Дать модель пользователя (PHP)

Я пишу класс PHP для управления эти свойства, но похоже, что я пишу много одного и того же кода. (Getters and seters). Должен ли я использовать магические методы для управления этим? Это похоже на идею OK, но я не хочу, чтобы были установлены неправильные свойства. Есть идеи?

<?php 
class User 
{ 
    private $username; 
    private $email 
    private $first_name; 
    private $last_name; 
    private $address; 
    private $address2; 

    function __construct() 
    { 

    } 

     function getUsername() 
     { 
      return $this->username 
     } 


     function setUsername($username) 
     { 
      $this->username = $username; 
     } 

     ... 
} 
?> 
+0

См [этот вопрос] (http://stackoverflow.com/questions/1531091/php-class- def-individual-accessors-mutators-or-set-with-switch) для некоторых идей и сравнений между магическими методами и отдельными аксессуарами. – Wiseguy

+0

есть примеры моделей здесь http://stackoverflow.com/questions/6011711/transactional-pdo-with-mvc-across-multiple-models/6011916#6011916 – Ibu

ответ

0

Если вы не делаете проверку на вход, нет смысла использовать геттеры/сеттеры здесь, на мой взгляд.

Сделайте свойства public и переопределить геттеры/сеттеры для недействительных свойств с помощью магических методов:

class User 
{ 
    public $username; 
    public $email; 
    public $first_name; 
    public $last_name; 
    public $address; 
    public $address2; 

    public function __get($var) { 
     throw new Exception("Invalid property $var"); 
    } 

    public function __set($var, $value) { 
     $this->__get($var); 
    } 

} 

$user = new User; 
$user->username = 'foo'; // works 
$user->foo = 'bar';  // errors 
0

Прежде всего, вы не можете использовать общедоступные объекты?

Если нет и ваши свойства не требуют никакой логики при получении/настройке, я бы использовал __get и __set.

Если вы действительно не хотите «неправильные» свойства создаются (почему?), Вариант может быть использовать белый список свойств, которые нормально установить:

function __set($key, $value) { 
    $whitelist = array("firstname", "lastname", ..); 
    if(!in_array($key, $whitelist)) 
     throw new Exception("Invalid property"); 
} 
Смежные вопросы