Задумка такая.. Использовать возможности PHP 7, а именно поддержку контроля скалярных типов данных, при выборке из бд, для приведения всех полей к нужному типу.
Вот как это получилось у меня:
PHP:
скопировать код в буфер обмена
скопировать код в буфер обмена
- namespace Core\Market\Products;
- use Core\DataBase\Mysql;
- use Core\Market\System\Constants\MTables;
- class Product
- {
- use Mysql;
- private $id;
- private $producerId;
- private $authorId;
- private $currencyId;
- private $price;
- private $inStockAmount;
- private $name;
- private $deliveryDays;
- private $shortDesc;
- private $seoDesc;
- private $seoKw;
- private $created;
- private $modified;
- private $objProperties;
- public function __construct(int $productId)
- {
- $sql = 'SELECT producer_id, author_id, currency_id, price, in_stock_amount, delivery_days, name, short_desc, '.
- 'seo_desc, seo_kw, created, modified, obj_properties FROM '.MTables::PRODUCTS.' WHERE id = '.$productId;
- $q = self::db()->prepare($sql);
- $q->execute();
- if($r = $q->fetch(\PDO::FETCH_NUM)) {
- $this->id = $productId;
- $this->setParams($p1,$p2,$p3,$p4,$p5,$p6,$p7,$p8,$p9,$p10,$p11,$p12,$p13);
- }else{
- throw new \Exception('product '.$productId.' was not found');
- }
- }
- private function setParams(int $producerId, int $authorId, int $currnecyId, float $price, int $inStockAmount,
- int $deliveryDays, string $name, string $shortDesc, string $seoDesc, string $seoKw,
- int $created, int $modified, int $objProperties)
- {
- $this->producerId = $producerId;
- $this->authorId = $authorId;
- $this->currencyId = $currnecyId;
- $this->price = $price;
- $this->inStockAmount = $inStockAmount;
- $this->deliveryDays = $deliveryDays;
- $this->name = $name;
- $this->shortDesc = $shortDesc;
- $this->seoDesc = $seoDesc;
- $this->seoKw = $seoKw;
- $this->created = $created;
- $this->modified = $modified;
- $this->objProperties = $objProperties;
- }
- static public function issetProduct(int $productId)
- {
- $q = self::db()->prepare('SELECT COUNT(*) as rows FROM '.MTables::PRODUCTS.' WHERE `id` = '.$productId);
- $q->execute();
- $r = $q->fetch(\PDO::FETCH_ASSOC);
- return ($r['rows'] > 0);
- }
- }