Итак, у меня есть следующий класс элемента:
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
Вопрос о расширении объекта PHP ⇐ Php
Кемеровские программисты php общаются здесь
1735309896
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 лучшим решением для элементов такого типа?
Заранее спасибо.
Подробнее здесь: [url]https://stackoverflow.com/questions/1054326/php-object-extension-question[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия