Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / PHP: метаинформация в комментариях класса / 9 сообщений из 9, страница 1 из 1
16.11.2015, 22:12
    #39105013
Alibek B
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PHP: метаинформация в комментариях класса
С PHP приходится сталкиваться только от случая к случаю.
И обычно нужно решить конкретную задачу поскорее и любым подходящим способом.
В одной из задач мне нужно работать с объектами в базе данных, для чего у меня используется набор классов, представляющих собой сущности базы данных.
Мне показалось удобным оформлять эти классы примерно так:
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
class Payment
{

    use SqlBinding;

    public $id;                 // DB-MAPPING:
    public $clock;              // DB-MAPPING: PAYMENT_CLOCK
    public $error;
    public $reqClock;           // DB-MAPPING: REQ_CLOCK
    public $reqType;            // DB-MAPPING: REQ_TYPE
    public $reqAccount;         // DB-MAPPING: REQ_ACCOUNT
    ...
    public $storno;             // DB-MAPPING: STORNO
    public $stornoClock;        // DB-MAPPING: STORNO_CLOCK
    public $stornoReason;       // DB-MAPPING: STORNO_REASON
    public $stornoOriginator;   // DB-MAPPING: STORNO_ORIGINATOR
    public $refAgent;           // DB-MAPPING: .id PAYMENT_AGENT_ID
    public $refRegistry;        // DB-MAPPING: .id PAYMENT_REGISTRY_ID
    public $refCustomer;
    public $refAccount;
...
}


Здесь SqlBinding это трейт, который считывает php-файл класса, находит в них подходящие строки (публичное свойство, у которого есть комментарий // DB-MAPPING:) и синхронизирует данные класса с базой данных; если после комментария указано слово, то оно считается именем поля, если после комментария указано два слова, первое из которых начинается с точки, значит это внешний ключ (имя столбца с FK во втором слове), который в классе представлен другим классом (имя мембера в первом слове). Для сохранения данных из класса в БД я вызываю метод класса save, для загрузки данных из БД в класс я вызываю метод класса load.

Или может быть я велосипед изобретаю?
________________________
Мы смотрим с оптимизмом...
...в оптический прицел.
...
Рейтинг: 0 / 0
17.11.2015, 10:02
    #39105239
kunaksergey
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PHP: метаинформация в комментариях класса
Alibek B.,
Так вроде для работы с БД существуют шаблоны ActiveRecord, DataMapper
...
Рейтинг: 0 / 0
17.11.2015, 10:08
    #39105245
r u
r u
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PHP: метаинформация в комментариях класса
Alibek B.,

да, велик с квадратными колесами.

если нужен маппинг, есть куча всяких doctrine, propel...
плюс щас в каждом уважающем себя современном фреймворке есть ORM библиотеки на любой вкус.
...
Рейтинг: 0 / 0
17.11.2015, 11:14
    #39105320
Alibek B
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PHP: метаинформация в комментариях класса
Просто маппинг мне не нравится тем, что нужно в программном коде дублировать структуру базы данных.
Мне показалось, что подобная "самодокументация" более удобна.
Или я просто не проникся идеями ORM?
...
Рейтинг: 0 / 0
17.11.2015, 11:33
    #39105352
SharuPoNemnogu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PHP: метаинформация в комментариях класса
Я не хочу строить дом из кирпичей и цемента. Я сделаю свои кирпичи из картона, заполненные наполнителем из плюшевых мишек, буду склеивать их сгущенкой и ставить ромбиком..
...
Рейтинг: 0 / 0
17.11.2015, 13:45
    #39105535
ScareCrow
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PHP: метаинформация в комментариях класса
авторПросто маппинг мне не нравится тем, что нужно в программном коде дублировать структуру базы данных.
ну можешь сделать разбор типов и названий колонок, полученных из базы.
...
Рейтинг: 0 / 0
17.11.2015, 13:47
    #39105540
ScareCrow
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PHP: метаинформация в комментариях класса
авторесли после комментария указано слово, то оно считается именем поля, если после комментария указано два слова, первое из которых начинается с точки, значит это внешний ключ


http://docs.doctrine-project.org/projects/doctrine-common/en/latest/reference/annotations.html
https://github.com/doctrine/common
...
Рейтинг: 0 / 0
17.11.2015, 13:56
    #39105556
Alibek B
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PHP: метаинформация в комментариях класса
ScareCrow http://docs.doctrine-project.org/projects/doctrine-common/en/latest/reference/annotations.html
Выглядит жутко.
Но за ссылку спасибо, теперь понятно, к чему придет мой велосипед, если его делать универсальным и доводить до ума.
В своем текущем виде им пользоваться просто, вот на такой стадии его и оставлю.
...
Рейтинг: 0 / 0
17.11.2015, 14:12
    #39105583
ScareCrow
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PHP: метаинформация в комментариях класса
Alibek B.,

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
// src/AppBundle/Entity/Product.php
namespace AppBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity
 * @ORM\Table(name="product")
 */
class Product
{
    /**
     * @ORM\Column(type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;

    /**
     * @ORM\Column(type="string", length=100)
     */
    protected $name;

    /**
     * @ORM\Column(type="decimal", scale=2)
     */
    protected $price;

    /**
     * @ORM\Column(type="text")
     */
    protected $description;
}
...
Рейтинг: 0 / 0
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / PHP: метаинформация в комментариях класса / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]