• Хотейки и вопросы по проектированию классов?

    iximiuz
    @iximiuz
    По первому пункту налицо нарушение закона Деметры. Вероятнее всего нужно по-другому поделить ответственность между классами, чтобы не возникала необходимость делать длинные цепочки вызовов.

    По поводу второго пункта. PHP и так вполне себе DDL язык. Если нужно хранить данные, то можно спокойно их хранить в специальных PHP файлах, содержащих один массив, например. И инклюдить их в нужном месте. Все эти замесы с ini-файлами (и еще того хуже xml-файлами) пошли от компилируемых языков, особенно из Java, когда описать конфиги непосредственно в Java-коде с возможностью их изменения без перекомпиляции всей программы достаточно проблематично.
    Ответ написан
    2 комментария
  • Хотейки и вопросы по проектированию классов?

    1. не трогай свойства напрямую, используй методы.
    $obj->getProperty($propertyName); //class->arr["name"]
    $obj->getPropertyAttribute($propertyName, $attributeName); // class->arr->name["attr"]

    если уж совсем невмоготу - сделай json_decode(json_encode($a)) - получишь объекты заместо массивов. но это патология.

    2. лучше сделать массив с названием материала бревно(длина 3, ширина 5, высота 50).
    разбирать потом названия вида БревноШиринаДверьСобакаТелеграф это обратно патология.

    хранить данные в ини-файлах это сцуко оригинально, но лучше так не делать.
    Ответ написан
    3 комментария
  • Хотейки и вопросы по проектированию классов?

    DmitriyEntelis
    @DmitriyEntelis
    Думаю за деньги
    Вы как то странно используете классы. Если name - свойство экземпляра класса, то почему бы не обращаться напрямую. Опять же если описывать логику классами - то надо описывать логику классами.
    class car 
    {
      public $manufacturer;
      public $engine;
      function __construct ()
      {
       $this->engine = new carEngine();
      }
    }
    $car = new car();
    $car->manufacturer = 'bmw';
    $car->engine->type = 'v6';

    итд
    Ответ написан
    5 комментариев
  • Есть ли альтернатива PHP?

    DmitriyEntelis
    @DmitriyEntelis
    Думаю за деньги
    Основная претензия к PHP - огромное количество школьников которые прочитали полторы статьи, посмотрели 3 видео курса, собрали бложег на вордпресс и считают себя программистами.
    Есть некоторые шероховатости и нелогичности, но с каждым релизом их меньше и меньше.
    Я не вижу каких то принципиальных преимуществ у других скриптовых языков.
    Ответ написан
    1 комментарий
  • Как верно, как нужно, где можно посмотреть примеры как выводить данные?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Массив - это самый распространенный подход.
    Ответ написан
    Комментировать
  • Как верно, как нужно, где можно посмотреть примеры как выводить данные?

    @slavabars
    Веб программист
    У каждого свой велосипед. Твой вариант более нормальный. Единственное, работай с объектами.
    Ответ написан
    Комментировать
  • Как использовать SQL-запросы в JavaScript?

    @Nc_Soft
    Я думаю проще от сервера рут дать, пусть юзеры делают любые запросы
    Ответ написан
    Комментировать
  • На каком языке написаны vk, toster, google+?

    DmitriyEntelis
    @DmitriyEntelis
    Думаю за деньги
    OnYourLips а пацаны то и не знали habrahabr.ru/company/vkontakte/blog/214877
    У facebook кстати +-аналогичное решение под названием HipHop.
    Вообще надо понимать что в highload проектах очень редко все упирается в backend скрипты.
    Основная нагрузка ложится на хранилища данных - и вот там то кроется основной секс :)
    Ответ написан
    Комментировать
  • Посчитать повторяющиеся значения в переменной?

    элементарно же
    $arr = array();
    $arr[] = array ("name" => "Название 1", "length" => 100, "count" => 15);
    $arr[] = array ("name" => "Название 2", "length" => 99,  "count" => 5);
    $arr[] = array ("name" => "Название 3", "length" => 99,  "count" => 3);
    $arr[] = array ("name" => "Название 4", "length" => 100, "count" => 25);
    
    $temp = array();
    foreach ($arr as $item) {
      $temp[$item['length']] = isset($temp[$item['length']]) ?
        $temp[$item['length']] + $item['count'] :
        $item['count'];
    }
    
    $result = array();
    foreach ($temp as $length => $count) {
      $result[] = array("length" => $length, "count" => $count);
    }
    
    print_r($result);
    Ответ написан
    1 комментарий
  • Что почитать про нормализацию БД?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    В принципе учебник для этого не нужен, нормализация - минимизация избыточности данных, имеет 5 форм. Первые три формы нацелены на связанность данных, две последних на улучшение структуры. Очень хорошо описано здесь - citforum.ru/database/dblearn/index.shtml (главы 6 и 7)
    Кратко здесь - support.microsoft.com/kb/283878/ru

    И да, не всегда нужно гнаться за минимизацией, иногда приходится дублировать данные для более быстрого поиска, мир не идеален.

    А вот и видео неплохое - www.youtube.com/watch?v=1GWx5CZdSCg
    Ответ написан
    Комментировать
  • Где грани между быдлокодом, промежуточной стадией и профессиональным программированием?

    Понимаете, говокод это нечто собирательное. Как и красивый код.
    Тем не менее, пишем проеты мы в первую очередь для того что бы зарабатывать деньги. С течением времени стоимость поддержки кода увеличивается. И задача хорошего программиста стоимость этой поддержки снизить как можно сильнее. То есть по сути сэкономить бабла заказчику, и за это заработать больше самому.
    И вот есть куча книжек про то, как писать красивый код и не писать говнокод. Такие как чистый код, совершенный код, банда четырёх, и.т.д. Так вот - это всё книжки в первую очередь про то, как экономить бабло (и время, что в общем-то равно).

    Если вы напишите код как в ответе Василий например, то его наверняка многие назовут говнокодом. Но если это самый быстрый способ для вас выполнить задачу, (хотя может быть и существуют готовые решения, и вы только что придумали велосипед) и при этом этот код вряд ли будет меняться в будующем, то какая разница? Ну разве что отсутствие душевного удволетворения.

    По этому я стараюсь избегать слов "говнокод" и "красивый код". Есть код который имеет хорошие или плохие характеристики, в контексте выполняемой задачи. Характеристик много, от функциональных:
    Выполнение поставленной задачи.
    Отсутствие багов.
    Скорость работы.
    До качественных:
    Цикломатическая сложность, Связность, Сфокусированность, Тестабельность, Читабельность, Понимабельность, и.т.д.

    Рецепт хорошего кода прост. Думайте какие характеристики для вас важны, и отвечает ли ваш код этим характеристикам. Если не отвечает - то возможно это и есть то, что обычно называют говнокодом.
    Ответ написан
    Комментировать
  • Путь в быдлокодеры или как стать программистом с 0?

    DmitriyEntelis
    @DmitriyEntelis
    Думаю за деньги
    1) Я упорно отказываюсь называть верстальщиков - программистами.
    На 90% это тупая низкооплачиваемая работа, никакого отношения к программированию не имеющая
    Исключения есть, но не много.
    Для того что бы стать web backend программистом - знания верстки нужны самые минимальные (читай - не нужны вообще, но в процессе все равно появятся), зато нужно например sql которого в вашем списке нет почему то.

    2) Если хочется денег и нет отвращения к дресс-коду - можно пойти в java разработчики.
    По деньгам выиграете заметно, но это в 99% enterprise со всеми вытекающими.

    3) Если хочется денег и свободы - можно пойти в разработчики ios/andoid на выбор.
    Самый правильный вариант если с нуля выбирать профессию.
    Кадровый голод в сфере дикий, в dc берут с 0ми знаниями на неплохие деньги.

    Imho самый правильный вариант для Вас - второй или третий.
    Становиться верстальщиком сейчас - явно не самая хорошая идея.

    UPD
    PolzuizYami: Что за enterprise и что за вытекающие? )
    Какой порог входа для разработчика под мобилки и через сколько я смогу показать результат и что то за это начать получать ? Почему вы не любите fronted? ) И почему становится fronted'ом не лучшая затея(на верстке я как бы не собирался останавливаться, но это основа основ для fronted'a)?

    Enterprise - работа или в крупной компании или в аутсорсере который работает на крупную не IT компанию. Вытекает из этого определенный уровень бюрократии, чинопочитания, формализма, дресскода и прочего, что в какой то мере компенсируется кешем и стабильностью™.
    Опять же не всюду, но очень много где.

    Порог входа для мобильной разработки сейчас достаточно низкий, 0-1-2 месяца самостоятельной практики и можно идти на вакансию junior, в dc платят 40-50 на старте, за год-два можно выйти на 150-250+ с учетом фриланса.

    По поводу фронтенда:
    Сразу небольшой дисклеймер:
    a) не хочу никого обидеть, пишу исходя из личного опыта. b) это справедливо не для всех проектов.

    Итак:
    1) В отличии от backend - сложность и объем задач по frontend не зависит от размера аудитории проекта.
    2) В отличии от backend - работы по frontend выполняются быстро и в отсутствии требований по изменениям - доработкам не подвергаются.
    3) В отличии от backend - текущая работа по frontend сильно менее связана с прошлыми этапами работы, либо погружение в проект требует не много времени (не всегда, но часто)
    4) Следствие из 1, 2, 3: Для запуска развития среднестатистического проекта нужны backend разработчики в команду (штат/длительный аутсорс) и не нужны frontend разработчики в команду (проще и дешевле брать фрилансеров под конкретные задачи)
    5) Вывод: Путь верстальщика это в 90% либо короткая дешевая работа на фрилансе, либо работа в штате по поддержке постоянных маркетинговых хотелок (подвиньте банер на 20px в бок, итд), либо в очень редких случаях - действительно сложные, нагруженные с точки зрения frontend проекты.
    Почему в редких случаях? Потому что таких проектов очень мало :) (и кстати многие из них - enterprise)

    UPD-2
    По поводу мобильной разработки:
    Куда пойдет mobile dev через 5 лет - предсказать сложно. На мой взгляд основная масса проектов сейчас достаточно простая и для успешной реализации требует монотонной аккуратной работы (70-80% времени это собирание верстки и анимаций, подключения к внешним апи). Адские зарплаты сейчас обусловлены дикой нехваткой людей. Но есть мнение что пик уже прошел.
    С другой стороны появляются новые мобильные платформы - и разработчики нужны уже под них) Непрерывный процесс саморазвития как он есть)

    UPD-3
    Собственно, почему Веб ,а не мобильная или Java. Ориентировался чисто по вакансиям своего города, к сожалению живу не в DC и да же не в DC2, а наверно DC 666 (Владивосток).
    Вся прелесть бытия IT специалистом - в нашей широкой востребованности. Не нужно ориентироваться на свой город, да и на DC по большому счету не стоит. Перед тобой вся планета.
    да и маме сайт сделаю
    ппц мотивация для выбора жизненного пути.
    Ну а про потолок верстальщика - я расписал ниже.
    Ответ написан
    28 комментариев
  • Баг в функции strpos?

    упомяну, что бездумно использовать mb_*, особенно с большим количеством данных, не стоит, т.к. функции намного медленнее работают их однобайтных коллег.
    Использовать следует только при работе с многобайтными кодировками. Если же вы ищите латиницу, даже на странице с кириллицей, то используйте все равно strpos.
    Ответ написан
    1 комментарий
  • Баг в функции strpos?

    KorsaR-ZN
    @KorsaR-ZN
    Так это у вас наверняка utf-8 кодировка, а кириллица занимает 2 байта. Используйте для этого mb_* функции
    Ответ написан
    1 комментарий
  • Как удалять пользователя из БД без удаления id?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    ТЕБЕ
    ЭТО
    НЕ НУЖНО
    Ответ написан
    Комментировать
  • Как удалять пользователя из БД без удаления id?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    -1. Блокируете вход пользователей на сайт и завершаете сессии всех уже вошедших.
    0. Делаете бэкап базы.
    1. Проверяете, что все ссылки на id пользователя в других таблицах объявлены как foreign key on update cascade.
    2. Запросом получаете все id в порядке их возрастания.
    3. Генерируете список замен id порядковыми номерами полученных строк.
    4. Выполняете запросы на замену по списку.
    5. Выполняете alter table `users` set auto_incremen=... со следующим порядковым номером.
    6. Думаете, на кой ляд всё это было нужно, если id всё равно обрабатываются скриптом, и ловите глюки на сайте.
    7. Восстанавливаете базу из бэкапа.
    8. Разрешаете вход пользователей на сайт.
    9. В будущем не удаляете пользователей, а просто ставите атрибут "удалён".
    Ответ написан
    3 комментария
  • Найти ошибку в алгоритме сортировки?

    @ugodrus
    Страшная у вас конструкция. Особенно в циклах count(). sizeof() работает быстрее. Да и в циклы не стоит вставлять подобное т.к. эти вычисления происходят при каждой итерации цикла. И ещё... Есть масса отличных алгоритмов сортировки. Например методом Шелла.
    function ShellSort($elements,$length) {
         $k=0;
         $gap[0] = (int) ($length / 2);
     
         while($gap[$k] > 1) {
             $k++;
             $gap[$k]= (int)($gap[$k-1] / 2);
         }//end while
     
         for($i = 0; $i <= $k; $i++){
             $step=$gap[$i];
     
             for($j = $step; $j < $length; $j++) {
                 $temp = $elements[$j];
                 $p = $j - $step;
                 while($p >= 0 && $temp < $elements[$p]) {
                     $elements[$p + $step] = $elements[$p];
                     $p= $p - $step;
                 }//end while
                 $elements[$p + $step] = $temp;
             }//endfor j
         }//endfor i
     
         return $elements;
     }

    Метод сортирует массив максимум в 1.65 прохода (в зависимости от длины массива). В вашем случае количество манипуляций - длина массива в квадрате. Попытка зачтена, метод - мягко говоря не очень.
    Ответ написан
    3 комментария
  • Найти ошибку в алгоритме сортировки?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Странно, а в каком месте стоял var_dump? Вообще-то, в конце работы вашего алгоритма получаем
    array(4) { [0]=> int(200) [1]=> int(7) [2]=> int(6) [3]=> int(6) }

    То есть сортировка работает, только по убыванию.
    Ответ написан
    3 комментария
  • Как передать переменную в другой файл?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    форму с кнопкой отправить делать не хочу,

    Хотелки и капризульки оставляем дома. После этого вооружаемся знаниями и технологиями.

    Подсказываю:
    Смотреть в сторону стандартной формы, с перезагрузкой. Чтобы получить хотя бы отдаленное представление о том, что ты делаешь и с какой технологией работаешь.

    После того как ты освоишь стандартный вариант с презагрузкой, и он, наконец, заработает - можешь попробовать освоить технологию AJAX для того чтобы сделать без перезагрузки.
    Ответ написан
    8 комментариев
  • Сравнение списков, как лучше организовать?

    @angry_bender
    PHP, JS
    1. Добавляете в таблицу еще одно поле hash (varchar(40)), пишете цикл, который туда положит md5 от ваших строк.
    2. На данное поле накладывается индекс.
    3. Пишете запрос select * from `mytable` order by `hash` ASC;
    4. В цикле по всем записям по сл. алгоритму:
    4.а. если флаг пустой, то флаг = hash текущей строки, аккумулятор = строковому полю строки (под строкой понимается очередная запись из БД)
    4.б. если флаг не пустой, то если флаг равен hash текущей строки, и аккумулятор = текущему полю строки, - удаляем данную запись
    4.в если флаг не пустой и флаг не равен hash текущей строки: флаг = hash текущей строки, аккумулятор = строковому полю строки

    Еще пришел в голову вариант: select count(id) as count, hash from `mytable` group by `hash`
    и там обработать те хеши, у которых count > 1
    Ответ написан
    Комментировать