Есть что-то такое?
Я хотел бы сделать что-то вроде этого в 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/
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;
}
}
}
Думаю, некоторые фреймворки могут привнести такую функциональность, но PHP не предназначен для предоставления подобных высокоуровневых конструкций.
.Нет, по крайней мере, не существует нативного фреймворка, поддерживаемого PHP.
Вы можете использовать фреймворк, который будет предоставлять валидацию, например, для форм. Zend FrameworkZend 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;
}