|
|
|
| Приветствую!
Вопрос касается удобства разработки.
Допустим, есть статья - у нее куча свойств: название, анонс, текст, SEO title, и т.д. Конечно, все это можно юзать из массива, полученного из БД. Но для удобства я создаю объект вида articles и описываю все его свойства.
class articles{
public $name;
public $anons;
//etc
}
|
Это очень удобно: в любой момент из любого места IDE подскажет, какие свойства есть у статьи.
В случае с массивами сложнее: чтобы увидеть доступные свойства приходится открывать код запроса, потом лезть в БД чтобы увидеть какие вообще есть поля.
Вопрос к профессионалам: насколько сильно объекты проигрывают массивам по производительности?
Описанная мной схема с объектами работает вполне успешно в одном крупном посещаемом сайте.
Но все же :) | |
|
|
|
|
|
|
|
для: fix
(09.02.2014 в 20:40)
| | Что-то у вас все в куче и объекты, и массивы, и бедной базе тоже досталось.
Если бы сами объекты догадывались что у чего-то появилось новое свойство, ну какой бы разговор, тогда бы и базы не надо было бы.
А что :
class articles{
public $name;
public $anons;
//etc
}
|
что:
<?
articles = [$name, $anons];
|
в плане узнать что имеется, в чем трудности то? Хотя свойство в этом случае, это ключ. | |
|
|
|
|
|
|
|
для: fix
(09.02.2014 в 20:40)
| | когда делаете обычные, не высоконагруженные проекты, на таких мелочах вообще не стоит особо заострять внимание. дело в том, что когда вы работаете с базой данных, намного больше ресурсов съедает подключение к серверу субд и выполнение запросов. всё остальное это мелочи. более того, на итоговом результате это вообще может никак не сказаться. можете сами попрофилировать и убедиться в этом | |
|
|
|
|
|
|
|
для: psychomc
(09.02.2014 в 22:24)
| | Нет, ребят, я не про базу. Я пример привел лишь с базой.
Речь не о конкретном, а теоретически. Понятно что соединение, и т.д.
Вообще, насколько вреден такой подход для крупных проектов - вот в чем был вопрос. В мелких проектах можно все данные в голове удержать :)
А вот в крупных, где куча всего - спасают как раз-таки объекты.
"Если бы сами объекты догадывались что у чего-то появилось новое свойство,"
никто не догадывается что у них новое свойство. Это самое свойство прописывается в объекте через
"можете сами попрофилировать и убедиться в этом" - да, но хотелось бы услышать мнение тех, кто уже так делал и практикует в крупных проектах... | |
|
|
|
|
|
|
|
для: Fix
(10.02.2014 в 14:41)
| | >Это самое свойство прописывается в объекте через
А в массив значит прописать подобное и вызвать, это значит невероятные сложности?
В чем суть вашего вопроса - не делать лишних обращений к базе, а держать некие данные наготове, или что лучше массив или объект? | |
|
|
|
|
|
|
|
для: confirm
(10.02.2014 в 14:49)
| | "В чем суть вашего вопроса -... " - в теме так и говорится "что работает быстрее".
Я же говорю. В IDE данные объектов выводятся сразу. А массив - не выводится.
Вы работаете в IDE? Если да, то наверняка пользуетесь автокомплитом при работе классами и методами.
Например, пишете
$articles = new Articles();
$articles->... //и вот тут IDE сразу выдает какие методы есть у класса.
|
Знакомо?
Так вот точно такой же принцип при работе, например, со статьей. Например, этот самый класс имеет метод get_articls_list.
class Articles{
publib function get_articles_list(){
$result = array();
// получили все статьи
while ($article = mysql_fetch_array()){ // пишу тупо чтобы было понятно
$article_item = new Article_item();
$article_item->name = $article['name'];
$article_item->description = $article['description'];
$article_item->text = $article['text'];
$result[] = $article_item;
}
return $result; // возвращаем массив, состоящий из объектов
}
}
class Article_item{
public $name;
public $description;
public $text;
}
|
Разбираем полученный массив
foreach ($result as $article_item){
print $article_item-> // вот тут уже при написании нам выдастся автокомплит.
}
|
Что это дает? То что не придется помнить все переменные и их написание. Даже если вернуться к проекту через 5-6 месяцев, не придется вспоминать какие же параметры доступны для статьи.
Повторяюсь: речь не только о данных, полученных с БД. Тут также может быть и константы (опубликовано/не опубликовано), какие-то расчеты типа "дата/время архивирования статьи", которое вычисляется в коде, и т.д.
Данный метод помогает нам, в команде нескольких разработчиков, знать что есть у каждого элемента и не копаться в чужом коде. Вот и все.
Надеюсь донес свою мысль.
Скриншот с IDE скинуть пока не могу - занят процессом)) Как докачает скину если нужно. | |
|
|
|
|
|
|
|
для: FiX
(10.02.2014 в 15:27)
| | Вы не можете ставить вопросы, ибо это уже ваши проблемы разработки. | |
|
|
|
|
|
|
|
для: Fix
(10.02.2014 в 14:41)
| | я кажется всё более-менее понятно написал...кстати, база данных используется в 99% проектов. короче, такой подход не вреден, нравится делать так - делайте. разницы скорее всего не почувствуете совсем. если хотите, чтобы производительность выросла, переходите на php 5.4 + | |
|
|
|
|
|
|
|
для: psychomc
(10.02.2014 в 15:52)
| | PHP 5.4+ работает лучше с объектами?)
Да, нравится делать так. Тем не менее было бы интересно узнать какое решение будет работать быстрее.
Спасибо за ответы. Может еще кто-нибудь отпишется со своими мыслями :) | |
|
|
|
|
|
|
|
для: FiX
(10.02.2014 в 15:58)
| | php 5.4 в принципе работает лучше, т.е быстрее более старых версий. почему - погуглите.
по поводу скорости массивов и объектов http://stackoverflow.com/questions/2193049/php-objects-vs-arrays
If you're using PHP5 then difference between objects or arrays almost is not significant
надеюсь, теперь понятно | |
|
|
|
|
|
|
|
для: fix
(09.02.2014 в 20:40)
| | Я не совсем разбираюсь, но тут выпадает момент создания класса и загрузки памяти которая не нужна.
У массива вы сразу грузите память.
В классах вы РЕЗЕРВИРУЕТЕ память
Мне кажется если физические мощности одинаковы, то массивы ЧАЩЕ быстрее, хотя это мелочи и играют роль при ограниченных физических рессурсах.
Поэтому!!.
Ваши эксперименты ИСТИННЫ только в ВАШИХ физических условиях.
Нельзя ответить кто быстрей верблют, козел или лошадь, если не учитывать внешние условия.
В горном ландашафте быстре козлы.... | |
|
|
|
|
|
|
|
для: добряк
(10.02.2014 в 22:46)
| | добряк,
спасибо за ответ! Примерно такое я и ожидал услышать. Я догадывался что использование массивов чем-то обосновано. Теперь появилась ясность... :)
Единственное - надо будет понять, сколько именно памяти выделяется изначально. Ведь потом она расширяется по мере необходимости.
Одно дело если переменное присваивается просто TRUE, а другое - текст состоящий из 5000 символов...
Надо будет самому научиться ставить эксперименты :) | |
|
|
|
|
|
|
|
для: FiX
(11.02.2014 в 12:31)
| |
<?
$start_time = microtime(true);
$start_mem = memory_get_usage();
// do...
$end_time = microtime(true) - $start_time;
$end_mem = memory_get_usage() - $start_mem;
|
| |
|
|
|
|
|
|
|
для: psychomc
(11.02.2014 в 13:22)
| | psychomc ,
данный способ не совсем корректно отображает расходование памяти. | |
|
|
|
|
|
|
|
для: Fix
(12.02.2014 в 22:03)
| | Почему? | |
|
|
|