Что-то подобное существует?
Я хотел бы сделать что-то подобное на PHP, но я не вижу, как это сделать из документов PHP:
public class User : ValidationBase { [NotNullOrEmpty(Message = "Please enter a user name.")] public string UserName { get; set; } }
Я ищу PHP-эквивалент атрибута свойства ASP.NET/C#, который в приведенном выше примере обозначается [NotNullOrEmpty(Message = "Please enter a user name.")]
Над объявлением свойства.
PHP не имеет встроенного механизма для объявления атрибутов, но можно смоделировать это поведение, используя какой-то пользовательский код. Основная идея состоит в том, чтобы поместить ваши метаданные в блок комментариев, а затем написать класс, который анализирует этот блок комментариев. Это менее удобно, чем C #, потому что вам нужно обеспечить правильное форматирование ваших атрибутов комментариев, но оно работает.
Вот пример того, как это сделать: http://web.archive.org/web/20130302084638/http://interfacelab.com/metadataattributes-in-php/
Принятый ответ Энди Уилсона ссылается на страницы, которые больше не доступны. Мне удалось добраться до самой страницы через http://web.archive.org/web/20130116184636/http://interfacelab.com/metadataattributes-in-php/, но загрузка кода, на которую ссылается автор, также является мертвой ссылкой ,
Однако с тех пор я нашел большую реализацию аннотаций PHP здесь: https://github.com/mindplay-dk/php-annotations
Единственный недостаток, который я нашел до сих пор, заключается в том, что я полагаю, что имена файлов и имена классов совпадают с тем же случаем, что и у Code Igniter, но если бы я не справился с этим, я скоро все это работал и, конечно, это ограничение не повлияет на все реализации.
Нет, нет, по крайней мере, не поддерживается со стороны PHP.
Например, вы можете использовать фреймворк, который будет обеспечивать проверку для форм. Zend Framework имеет класс Zend_Form, который позволяет указать, нужны ли поля, какой тип они должны быть, и сообщение об ошибке для отображения, если это не так.
В PHP нет такой вещи, вам нужно ее закодировать.
Немного похоже на это, я полагаю:
public function setUserName($str) { if (empty($str)) { throw new Exception('Please enter a user name.'); } $this->userName = $str; } public function getUserName($str) { return $this->userName; }
Я думаю, что некоторые фреймворки могут принести такую функциональность, но PHP не предназначен для создания таких высокоуровневых конструкций.
php не имеет свойств или атрибутов свойств.
если вы хотите сделать что-то подобное в php, вам нужно объявить частное поле и написать общедоступные методы getter и setter и выполнить некоторую нулевую проверку в методе setter.
class User extends ValidationBase { private $userName; public function GetUserName() { return $this->userName; } public function SetUserName($val = '') { if ($val === '') { return false; } else { $this->userName = $val; return true; } } }