Вопрос о расширении объекта PHPPhp

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Вопрос о расширении объекта PHP

Сообщение Anonymous »

Итак, у меня есть следующий класс элемента:

class Item
{
Private $db;
частные $data = array(
'AltItem1' => null,
'AltItem2' => null,
'BaseUOM' => null,
'Category1' => null,
'Категория2' => null,
'Категория3' => null,
'Категория4' => null,
'Iden' => null,
'IsHCS' => null,
'ItemDesc' => null,
'ItemNmbr' => null,
'ItemType' => null,
'MSDS' => null,
'NoteText' => null,
'NonStock' => null,
'PrcLevel' => null ,
'TipPrice' => null,
'DTM_UpdType' => null,
'DTM_UpdDateTime' => null,
'DTM_DownloadDateTime' => null,
'DTM_UploadDateTime' => null
);

public function __construct(mysqli $db, $id = null) {
$this->db = $db;

if(!empty($id)){
$id = (int)$id;
$this->populate($id);

public function __get($key)
{
if(array_key_exists($key, $this->data)){
return $this->data[$key];
error_log("Неверный ключ '$ ключ'");
return null;

public function __set($key, $value)
{
if(array_key_exists($key, $this->data)){
$this->data[$key] = $value;
вернуть true;
вернуть false;

public функция populate($id)
{
$sql = sprintf(
"ВЫБРАТЬ %s FROM ItemMaster WHERE id =?",
implode(", ", array_keys($this->data))
) ;

$stmt = $this->db->stmt_init();
$stmt->prepare($sql) или умру («Не удалось подготовить заявление:" . $stmt->error);
$stmt->bind_param('i', $id);
$stmt->execute() или die('exec');
$stmt ->store_result();
if($stmt->num_rows == 1)
{
$params = array();
foreach($this->data as $key => $val){
$params[] = &$this->data[$key];

call_user_func_array(array($stmt, ' bind_result'), $params);
$stmt->fetch();
$return = true;
else{
user_error("Нет строки возвращаются для идентификатора '$id'");
$return = false;
return $return;
публичная функция Insert()
{
$params = $this->data;
$values ​​= array();

foreach($params as $param){
$values[ ] = "?";
}

$sql = sprintf(
"INSERT INTO recurrence (%s) VALUES (%s)",
implode(", ", array_keys($params)),
implode(", ", $values)
);

$stmt = $this->db->stmt_init();
$stmt->prepare($sql) или умрет («Не удалось подготовить оператор:» . $stmt->error);

$types = str_repeat("s", count($params));
array_unshift($params, $types);
call_user_func_array( array($stmt, "bind_param"), $params);

$stmt->execute();

$stmt->store_result();
$result = $stmt->result_metadata();
общедоступная функция update()
{
$sql = " UPDATE recurrence SET ";
$params = array();
foreach($this->data as $key => $value){
$params[] = "$key = ?";
$sql .= implode(", ", $params) . " WHERE id =?";

$stmt = $this->db->stmt_init();
$stmt->prepare($sql) или умереть («Не удалось подготовить оператор :" . $stmt->error);

$params = $this->data;
$params[] = $this->data['id'];
$types = str_repeat("s", count($params));
array_unshift($params, $types);
call_user_func_array(array($stmt, "bind_param"), $params) ;

$stmt->execute();

$stmt->store_result();
$result = $stmt->result_metadata();
}



Мой вопрос: что будет лучше? способ расширить этот класс с помощью структуры данных так, как она у меня есть? По сути, мне нужен другой класс для товара в корзине. Таким образом, некоторыми дополнительными полями будут количество, идентификатор корзины и т. д. Или есть лучший способ сделать это без расширения класса?

С другой стороны, скажем, у меня есть другой переменная $price, которая не хранится непосредственно в базе данных. Итак, я делаю это общедоступной переменной, но мне придется создать вспомогательные методы для доступа к ней, не так ли? Если это так, является ли мой массив $data лучшим решением для элементов такого типа?

Заранее спасибо.

Подробнее здесь: https://stackoverflow.com/questions/105 ... n-question
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»