mam taką oto klasę:
<?php namespace Cms\Entity; /** * Klasa reprezentująca użytkownika * @Table(name="users") * @Entity */ class User extends \Cms\Model\Base { /** * Identyfikator użytkownika * @var integer $id * @Column(name="id", type="integer", nullable="false") * @Id * @GeneratedValue(strategy="IDENTITY") */ private $id; /** * Imię użytkownika * @Column(type="string", length=64, nullable="true") * @var string */ private $firstname; /** * Nazwisko użytkownika * @Column(type="string", length=64, nullable="true") * @var string */ private $lastname; }
ona dziedziczy po tej klasie:
<?php namespace Cms\Model; /** * Klasa bazowa dla wszystkich modeli, ktore są odzwierciedleniem tabeli w * bazie danych */ class Base { /** * Zwraca nazwę metody 'seter'a używając konwensji camelCase * Dla przykładu dla zmiennej o wartości 'name' zwróci: setName * @param string $variable * @return string * @author Bartłomiej Kiełbasa <bartlomiej.kielbasa@gmail.com> */ protected function getSeterName($variable) { return 'set' . \Cms\Text::toCamelCase($variable); } /** * Zwraca nazwę metody 'geter'a używając konwensji camelCase * Dla przykładu dla zmiennej o wartości 'name' zwróci: getName * @param string $variable * @return string */ protected function getGeterName($variable) { return 'set' . \Cms\Text::toCamelCase($variable); } /** * Metoda wywoływana, gdy zostanie wywołana metoda, która nie jest zefiniowana w klasie. * Wykorzystuję ją, aby stworzyć metody w stylu setName setId getId itp dynamicznie * @param string $name * @param array $arguments * @throws \Cms\Exception */ $this->$variable = $arguments[0]; return; } } return $this->$variable; } } throw new \Cms\Exception("Method '$name' not found"); } }
Wizja tego co napisałem wygląda następująco:
W klasie User tworzę zmienne prywatne. W klasie Base tworzę metody, która sprawdzi, czy dana zmienna istnieje w klasie User i jeśli tak, to pozwoli wykonać metody w stylu setId oraz getId. Klas w stylu User będę miał naprawdę wiele, dlatego wolałbym uniknąć zbędnego kopiowania kodu. Metoda \Cms\Text::fromCamelCase przetwarza tekst na teksty wTymStylu
