Имена участников (разделяйте запятой).
А без ATTR_PERSISTENT работает?
Да, нормальная практика. ActiveRecord в Yii и Eliquent в Laravel так и долают: загружают из БД данные о таблице и по ним определяют типы.
Можно в классе репозитория между контроллером и моделью данных.
Просто переименовать: public function Browser($useragent = '') на: public function __construct($useragent = '')
Опытный напишет: class StringHelper { private $limit; public function __construct($limit) { $this->limit = $limit; }...