• PHP ООП объект. Как сделать выборку объектов?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Вам нужно нормальную ORM подсказать? Doctrine ORM

    1) потому что вы не знаете нужно оно вам или нет. Это будет разруливаться позже, когда вы будете выводить статью. Возможно по вашей логике будет вывод полного содержания одной статьи и заголовки остальных. В любом случае это состояние объекта. По хорошему после "загрузки" объект должен быть в том состоянии в котором его "сохраняли". Как будто бы мы просто взяли из массива объект, добавленный ранее. Ну и да, за счет прокси классов та же Doctrine умеет загружать данные частично и все остальное по необходимости отдельными запросами.

    2) обычно это просто поле author, которое хранит объект User, которые уже знает о том что внутри. Но отношения между объектами у вас всеравно есть. То есть ORM должна будет при обращении к полю user подгрузить всю сущность.

    Мне кажется что вам еще рано думать о том как написать свою ORM.
    Ответ написан
    Комментировать
  • Как передать данные в контроллер после инициализации service-a?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    $http возвращает обещание.

    function serviceFactory($http) {
        
        return function () {
            $http.get('/api/data').then(function (response) {
                 return response.data;
            }
        }
    }
    
    function mainController($scope, myService) {
        myService().then(data) {
            $scope.data = data;
        }
    }
    Ответ написан
    Комментировать
  • Существуют ли хоть какие-нибудь крупные сайты/порталы/сложные SPA на angular.js?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    https://builtwith.angularjs.org

    p.s. Любопытства ради спрошу - а вам зачем? Это на что-то влияет?
    Ответ написан
  • Как создаются крупные интернет проекты? Типа того же habrahabr?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Для начала нужна идея, потом начинается разработка, потом релиз и начинается раскрутка. То есть нам нужна идея, разработчики и деньги. Вопрос только в том как будет организована разработка и последующее сопровождение проекта. Аджайлы всякие, BDD и т.д.

    Хабр написан на PHP, язык роли не играет особо.
    Ответ написан
    Комментировать
  • Поможете рассмотреть модуль в js под микроскопом?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    модуль предоставляет нам область видимости, в которой мы прячем реализацию, а фасад в этом случае будет интерфейсом, то есть публичными методами. Пример на самом деле кажется мне немного странным...
    Ответ написан
  • Объект function?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    В JS все является объектом.
    function A () {
        // пустой конструктор
    }
    var Unnamed = function () {
    };
    var b = new A(); // цепочка прототипов у a будет такой: A <- Function <- Object
    var c = new Object; // синоним {}, прототипом будет Object.
    var d = new Unnamed();
    console.log(b.constructor.name); // "A"
    console.log(d.constructor.name); // ""
    console.log(b instanceof Object); // true
    console.log({} instanceof Object); // true


    Скажем у Object и Number это базовые типы и у них общий прототип. Просто {} или new Object - просто интанс Object-а, и именованные функции - новые типы, прототипом которого будет Object (так или иначе если спускаться вниз по цепочке прототипов).

    Внутри все веселее. Вируатльной машине вообще нет дела что у нее, Object или его потомок Foo, доступ к каждому свойству или методу всеравно в рантайме вычисляется. Она только оптимизировать это дело может для своего внутреннего представления. У каждого объекта в JS есть хидден-класс. То есть:
    var a = {x: 1}, b = {x: 2}, c = {y: 3};
    в этом случае a и b будут иметь один и тот же хидден класс, а c - другой.

    Когда мы пишем вот такой вот код:
    function foo(bar) {
        this.bar = bar;
        if (bar === false) {
            this.falthy = true;
        }
    }
    
    var a = new foo(true), b = new foo(bar);


    То типы этих двух переменных будут совпадать, а хидден классы нет. Таким образом во внутреннем представлении это будут два разных типа и оно не сможет применить одни и те же оптимизации. Так же если у нас был объект с одним свойством, а мы туда добавили еще десяток (цифра с потолка), то оптимизирующий компилятор перестает заниматься этими оптимизациями и будет думать что наш объект используется как простая хэш-мэпа.

    То есть виртуальной машине как бы плевать на тип объекта, так как она понимает, что объекты меняются в рантайме и могут поменяться когда захотят. Она смотрит на тип только при сравнении. В целом же ей фиалетово, Object у нас или наш Foo, она будет смотреть только на хидден класс и исходить из того, что оно раньше делало с объектами с таким хидден классом.
    Ответ написан
  • Поиск до первого символа?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Раз-два-три-четыре-пять,
    Знаете наверно,
    Раз-два-три-четыре-пять,
    Жадность - это скверно.
    Раз-два-три-четыре-пять,
    Скажем без подвоха,
    Раз-два-три-четыре-пять,
    Жадность - это плохо,
    Жадность - это плохо,
    Жадность - это плохо.

    (с) Остров Сокровищ

    Жадные выражения
    Ответ написан
    Комментировать
  • В чем минус хоститься на github pages?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    А с чего вы взяли что какие-то минусы есть? Ну... гитхаб не гарантирует вам аптайм 100% вот и все минусы.
    Ответ написан
    2 комментария
  • Нужно ли в javascript думать о private свойствах и методах?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Инкапсуляция это всегда хорошо. Вопрос в том нужны ли вам приватные методы и свойства? Они хороши в контексте классов, что бы разграничить интерфейс и реализацию. В JS же объект является интерфейсом. То есть он не может иметь скрытого состояния. Точнее может но не в самом объекте, а в другом каком...

    В Python-мире есть такая точка зрения по поводу отсутствия модификаторов досупа, которая выражается выражением "We're all consenting adults here" (все мы тут взрослые люди). То есть по мнению большинства поставить _ перед названием приватных методов достаточно что бы разработчики их не использовали. В JS даже это крайне не рекомендуется делать, так как у вас есть скоупы и все что нужно спрятать вы можете сокрыть там. Так же в ES6 появится WeakMap которые помогут хоть немного упростить разруливание скрытого состояния и уменьшит вероятность утечек памяти.

    Если посмотреть на фреймворки, например AngularJS активно использует $$ перед именем приватного свойства или метода. Причем в добавох в jsdoc эти свойства отмечены как private и если указать соответствующие опции для минификаторов, то те переименуют эти свойства и тогда разработчику будет уже тяжело предсказать как оно будет называться в следующем релизе.
    Ответ написан
    7 комментариев
  • Почему не выводится цикл в twig?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Во имя сатаны конечно!

    Мне кажется вам стоит все же почитать документацию по twig. Я без понятия зачем вам этот foreach там где вы данные посылаете. Я так же не понимаю почему у вас в цикле posts in key хотя должно быть post in posts. И я не понимаю почему mysql_* а не mysqli/PDO. Прекратите использовать устаревшие расширения.

    $posts = mysqli_fetch_all($result, MYSQLI_ASSOC);
    $twig->render('template.twig', compact('posts'));

    {% for post in posts %}
        {{ post.name }}
    {% endfor %}
    Ответ написан
  • В каких случаях лучше использовать lockfree структуры данных, а когда на мютексах?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Мне казалось что вся соль lock-free алгоритмов раскрывается тогда, когда критическая секция отрабатывает за время меньше чем требуется на переключение контекста. Скажем если у вас запись в файл разруливается - то можно и старый добрый мютекс применить без всяких там спинлоков, потому что писать он будет явно дольше чем переключается контекст. А если у вас доступ в буфер какой разруливается или в очередь, то тут lock-free будут сильно эффективнее.

    Так же при большом количестве потоков и высоком уровне конкуренси lock-free предпочтительнее.
    Ответ написан
  • Как созадть интерфейс в JavaScript?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    JS динамический язык с утиной типизацией. Собственно как в Ruby или Python. Наследование в нем реализуется через объекты и прототипы объектов. То есть места интерфейсу тупо нету.

    Грубо говоря, если допустить наличие "классов" в JS, то интерфейсом будет как раз таки абстрактный класс, у которого реализация всех методов выбрасывает ошибку not implemented. Во всяком случае люди которые еще не отвыкли писать интерфейсы на все и вся в Python или Ruby так обходятся.

    Но вообще вы должны подчиниться правилам утиной типизации и делать как-то так:

    function can(obj, methodName) {
         return ((typeof obj[methodName]) == "function");
    }
    
    // вот так вот сурово мы подаем вместо объекта словарь!
    var dict = {
       quack: function () {
           console.log('Quack! Quack!');
       }
    }
    
    // метод требует объект реализующий метод quack
    function test(obj) {
        if(!can(obj, 'quack')) { throw "Object should implement quack method" }
        obj.quack();
    }
    Ответ написан
    4 комментария
  • Что мне использовать: mysql или mysqli?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Используйте то что умеете и любите. Можно еще на php4 откатиться, зачем вам это ООП, late static binding... А еще никогда, никогда не экранируйте вывод. Это тормозит генерацию страницы. И всегда все пишите с нуля.

    mysql_* расширение deprecated, то есть использовать его не стоит. В PHP7 вообще не будет оного. Только mysqli/pdo. Prepared statements нужны для предотвращения sql инъекций. И опять же вы можете просто воспользоваться каким doctrine/dbal.
    Ответ написан
    4 комментария
  • Какие есть проекты с открытым кодом на Laravel?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    builtwithlaravel.com/categories/open-source

    Расчитывать что там будет все по бест-практис не приходится.
    Ответ написан
    2 комментария
  • Туториалы по express.js и mysql?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Даже на haskell можно сайты писать. Гугл вам в помощь.

    teknosains.com/i/simple-crud-nodejs-mysql
    Ответ написан
    Комментировать
  • Нужно ли патентовать интернет - проект?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Или же, интернет проекты не патентуют?

    Как-то так. Патентуют идеи. Каталог объявлений вам запатентовать не дадут. Алгоритм показа объявлений - дадут.
    Ответ написан
    Комментировать
  • Допустимы ли во VIEW условия?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    А почему нет? Много if/else это в любом месте не сильно хорошо и стоит подумать о том как бы избавиться от лишних условий и вынести эту логику в компонент хелпер (судя по всему у вас так и есть).

    VIEW в контексте MVC это слой конвертирующий данные из формата приложения в формат требуемый клиентом на выходе, так что без условий сложно. То есть в вашем случае трансформация доменных моделей в HTML. То есть вообще весь код который занимается такими трансформациями это view. Шаблонизатор, хелперы и т.д. Внутри этого слоя все те же правила что и для других слоев. DRY и все такое.

    p.s. Приведите пример "много условий".
    Ответ написан
    9 комментариев