Cześć.
Walczę z kolejnym wymogiem projektu nad którym siedzę.
"
Logika MySQL powinna być obsługiwana przez obiekty z właściwościami, zamiast bezpośrednich wartości kolumn. Proszę użyć setters i getters aby to osiągnąć oraz nie zapomnieć użyć ich do zapisu i wyświetlania logiki."
Póki co to nie użyłem setter/getter. Pokażcie proszę na przykładzie mojego poniższego kodu jak to powinno być zastosowane.
Klasa Produkt
class Product
{
public $productName;
public $sku;
public $price;
public $productType;
public function __construct()
{
$this->productName = isset($_POST['name']) ?
(string
) $_POST['name'] : null; $this->sku = isset($_POST['sku']) ?
(string
) $_POST['sku'] : null; $this->price = isset($_POST['price']) ?
(float
) $_POST['price'] : null; $this->productType = isset($_POST['productType']) ?
(string
) $_POST['productType'] : null; }
function ensureNoEmpytValues()
{
if (empty($this->productName) || empty($this->sku) || empty($this->price) || empty($this->productType)) return false;
return true;
}
}
Kawałek klasy ProductAdd z metodą wrzucającą do bazy:
<?php
class ProductAdd extends Product
{
public function insertNewProduct()
{
if ($this->ensureNoEmpytValues() === false)
return false;
$db = new DB();
$sku = $this->sku;
$productName = $this->productName;
$price = $this->price;
$selectedType = $this->productType;
$properties = $this->groupFullProperties();
foreach ($properties[$selectedType] as $propertyData) {
$postIndex = $propertyData['property'];
if (empty($_POST[$postIndex])) return false;
}
$queryInsertProduct = "INSERT INTO `product` (`id`, `sku`, `name`, `price`, `type`) VALUES (null, :sku, :productName , :price, :selectedType)";
$db->query($queryInsertProduct);
$db->bind(':sku', $sku);
$db->bind(':productName', $productName);
$db->bind(':price', $price);
$db->bind(':selectedType', $selectedType);
$db->execute();
$lastProductId = $db->lastInsertId();
foreach ($properties[$selectedType] as $propertyData) {
$propertyId = (int) $propertyData['id'];
$productValue = $_POST[(string) $propertyData['property']];
$queryInsertProductProperty = "INSERT INTO `product_property` (`id`, `product_id`, `property_id`, `value`) VALUES (null, $lastProductId , $propertyId, :productValue )";
$db->query($queryInsertProductProperty);
$db->bind(':productValue', $productValue);
$db->execute();
}
}
}