У меня есть несколько классов, которые в основном являются интерфейсами для строк базы данных. Поскольку класс предполагает, что строка уже существует (__construct
ожидает значение поля), существует открытая статическая функция, которая позволяет создавать строку и возвращать экземпляр класса.
Вот псевдокод (так что в этом есть ошибки и отсутствующие улучшения):
class fruit {
public $id;
public function __construct( $id ) {
if ( ! is_numeric($id) ) {
throw new Exception("Id is not numeric.");
}
$this->id = $id;
$sql = "SELECT * FROM Fruits WHERE id = $id";
...
$this->arrFieldValues[$field] = $row[$value];
}
public function __get( $var ) {
return $this->arrFieldValues[$var];
}
public function __set( $var, $val ) {
$sql = "UPDATE fruits SET $var = " . mysql_real_escape_string($val) . " WHERE id = $this->id";
}
public static function create( $fruit ) {
$sql = "INSERT INTO Fruits ( fruit_name ) VALUE ( '" mysql_real_escape_string($fruit) . "' )";
$id = mysql_insert_id();
$fruit = & new fruit($id);
return $fruit;
}
}
$obj1 = fruit::create( "apple" );
$obj2 = & new fruit( 12 );
Как называется этот шаблон?
Редактировать: я изменил пример на тот, который имеет больше функциональности интерфейса базы данных. Большую часть времени класс такого типа создавался бы нормально, через __construct()
. Но иногда, когда вам нужно сначала создать новую строку, вы вызываете create()
.