• Как вытащить массивы из массива массивов php?

    @Randewoo
    Потому что переменная $v содержит в себе еще один массив.
    <?php
    $arr = [
        [6, 1, 13, 7],
        [56, 23, 12, 78],
        [43, 288, 78, 6],
        [77, 12, 65, 83],
    ];
    foreach ($arr as $item) {
    	foreach ($item as $value) {
    		echo "{$value}\t";
    	}
    	echo "\n";
    }
    ?>
    Ответ написан
    Комментировать
  • Вывод вывод случайного значения из массива при каждой перезагрузке страницы?

    NooBiToo
    @NooBiToo
    echo $ar[cap1];
    ну и пишите функцию рандома, получаете длину массива, что бы задать границы рандома цифр, и клеете cap + рандомная цифра
    Пример:
    <?php
    $ar = array(
        'cap1' => '12',
        'cap2' => '14',
        'cap3' => '244',
        'cap4' => '556',
        'cap5' => '53',
         );
    
    $rnd = "cap".random_int(1, count($ar));
    echo $ar[$rnd];
    Ответ написан
    8 комментариев
  • В чем разница между namespace и use? И как они связаны с файловой системой?

    @AlikDex
    попытаюсь более человечнее написать =)

    с файловой системой ни то ни другое никак не связаны. Просто приняли так, чтобы путь совпадал с namespace'ом, стандартизировали короче для удобства. Ну и свои плюсы имеются конечно же.

    namespace это установка пространства имен. Скажем так - виртуальная коробочка, в которой лежат всякие штуки (классы). Это дает возможность использовать одинаковые названия классов для одного приложения.

    use указывает какой класс из какого пространства имен использовать. Его можно не писать, но тогда придется вызывать классы вместе с их namespace (если у тех классов они заданы, если нет, то все равно надо указывать глобальное пространство "\").
    типа: $customers = new \app\models\Customers();

    а с use будет:
    <?php
    namespace app;
    use app\models\Customers;
    
    $customers = new Customers();
    
    $imagick = new \Imagick(); // вызов из глобала. обратный слеш нужен когда указан какой-либо неймспейс для этого файла. Иначе попытается вызвать из текущего пространства, что приведет соотвественно к ошибке.


    В мануале все четко расписано в принципе, читай и пытайся понять =)
    Ответ написан
    Комментировать
  • Как перенести сайт с 1С-Битрикс на Wordpress?

    @Meiblorn
    Я видел битрикс внутри, видел вордпресс. Это совершенно 2 разных подхода к написанию кода.

    В битриксе все хаотично, html, js, php, css — все вперемешку, качество кода на уровне мелениума.
    В вордпресс все намного лучше, но могло быть и лучше: там очень много функционального программирования, хотя сейчас приоритет отдается ООП.

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

    myks92
    @myks92 Куратор тега PHP
    Нашёл решение — пометь вопрос ответом!
    Смотрите дальше курсы Елисеева. У него есть урок по проекту менеджеров. Где он разбивает все по паттерну CQRS. Вот ссылка на доменный слой https://github.com/ElisDN/demo-project-manager/tre...

    У вас получается, что UserService это Handler или UserHandler, если вы держите это все в одной папке. Посмотрите структуру. Я сейчас так же делаю и это очень просто понять. В UseCase папки то, что нужно делать:
    UseCase/User/Create
    В ней Файлы:
    Command.php
    Handler.php
    Form.php

    Или так:
    UseCase/User
    В ней Файлы:
    UserCreateCommand.php
    UserHandler.php
    UserCreateForm.php

    Если касаемо вашего, то не нужно повторять название методов в классе. UseServise метод просто login, а не userLogin

    Так же по названиям немного надо получше подумать. UserLoginOrLogoutServise удобнее назвать AuthServise...

    Не понятно откуда столько методов с началом в названии display

    Внедряйте репозиторий.
    Ответ написан
  • Почему php код отображается в браузере закоментированный?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Потому что он не исполняется.
    На сервере на настроен РНР

    а комментарии к делу не относятся, это хрому так хочется отображать тег, который он не понимает
    Ответ написан
    4 комментария
  • Как учиться быстрее и не тратить время зря?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Вам просто должно быть интересно.
    Ответ написан
    Комментировать
  • Как исправить ошибку HTTP ERROR 500?

    paran0id
    @paran0id
    Умный, но ленивый
    Нужно смотреть логи на сервере. 500 означает, что бэкэнд валится с ошибкой. Что за ошибка - смотрите в логах.
    Ответ написан
    2 комментария
  • Готов ли я как PHP Junior?

    php666
    @php666
    PHP-макака
    код свой покажи

    Знаю ООП
    это ты так думаешь)
    Ответ написан
    3 комментария
  • На youtub есть канал где читают код PHP?

    hack504
    @hack504
    Изучаю PHP рекомендуют читать чужой код.

    Даже спецы не читают чужой код, если их не заставят. Но было бы прикольно, действительно, посмотреть на youtub как разрабы читают чужой код, особенно на PHP
    1387209829_1176468776.gif
    Ответ написан
    10 комментариев
  • Написал класс но он выглядит как обычная функция, это нормально?

    myks92
    @myks92
    Нашёл решение — пометь вопрос ответом!
    Отдельные классы это хорошая практика. Однако, саму проверку стоит размещать там, где она используется. В вашем случае это сделано не совсем а равильно. Проверку нужно поместить в класс, объявления, но при этом ссылаться на проверку класса промо.

    Будет примерно так:
    public function getPromotion(): ?Promotion
    {
         return new Promotion($this->promotion_id, $this->promotion_time);
    }


    Далее помещаем метод проверки:
    public function isPromoted(): bool
    {
         return $this—>getPromotion()->isPromoted()
    }


    Если у вас данные для метода могут быть пустыми, тогда условие может выглядеть так
    public function isPromoted(): bool
    {
         return $this->getPromotion() ? $this—>getPromotion()->isPromoted() : false
    }


    Не претендую ни на что) Я делаю так) Создавать дополнительные классы это хорошо. Можно даже создать отдельный класс для Id. В типизации будет удобно работать. И понятно всем. Да и в целом не будет все в одном классе.
    Ответ написан
  • Постигаю MVC, для начала обучения так сойдет?

    hack504
    @hack504
    Сойдёт, но лучше раскидать сразу на отдельные блоки (даже без ООП) - вы хоть будете видеть что есть Модели, Вьюшки, Контроллеры и роутинг:
    <?php
    
    function response($view, $model) {include $view;include $model;}
    
    $models = array(
        'default' => '../model/model_default.php',
        'some' => '../model/model_1.php'
    );
    
    $views = array(
        'default' =>  '../view/view_default.php',
        'some' => '../view/view_1.php'
    );
    
    function controller($page) {
        GLOBAL $models, $views;
        switch ($page) {
            case 'firstPage':
                response($models['some'], $views['some']);
                break;
            case 'contacts':
                response($models['default'], $views['some']);
                break;
            case 'default':
                response($models['default'], $views['default']);
                break;
        }
    }
    
    function router(){
        if (isset($_GET['value']) && $_GET['value'] == 1) {
            controller('firstPage');
        } else {
            controller('default');
        }
    }
    
    router();
    Ответ написан
    Комментировать
  • Как вы проектируете классы в ООП и их взаимодействие?

    @xfg
    В PHP сообществе вообще не развиты вопросы проектирования и архитектуры. Большинство лепит, что придумает. PHP изначально родился для примитивных homepage, вобрал в себя всю несерьезность, низкий порог входа и как следствие довольно слабое комьюнити, что часто становится объектом для шуток.

    Искать ответы на вопросы проектирования и архитектуры нужно в Java. Например там почти каждый с самых азов слышал о де факто ставшей стандартом слоистой архитектуре, она же layered architecture, она же n-tier architecture и видел изображение похожее на это
    main-qimg-91d7188a63a833488f92239028d0ae
    Из которой нужно понять, что всю программу можно разделить на несколько слоев и зависимость между слоями должна быть направлена сверху вниз, но не наоборот. Таким образом, например фреймворк может быть инкапсулирован в presentation слой и в любой момент безболезненно заменен на другой, так как другие слои ничего о нем не знают. Вся бизнес-логика инкапсулирована в domain слой в виде plain old java object, который не зависит вообще не от чего, а также предоставляет интерфейсы (репозиториев например) для инфраструктурного слоя и только в этом слое фактически и будет тот самый настоящий ООП, который все так упорно пытаются найти. Никакого стороннего кода в бизнес-логике нет, а соответственно весь сторонний код можно в любой момент поменять, не трогая бизнес-логику вообще.

    Для этого нужно открыть какую-нибудь книгу, где за руку проведут с нуля до конкретного приложения построенного с использованием этой архитектуры. Например Implementing domain-driven design, хоть эта книга и о DDD, но я уже говорил, что слоистая архитектура это де факто. С опытом, будет понятно, что в более простых приложениях количество слоев можно уменьшить, понимая на какой компромисс придется пойти, что иногда можно объединить domain и часть infrastructure и получить всем известный шаблон Active Record или вообще выбросить эти слои и получить шаблон transaction script, когда для решения просто не требуется что-то более сложное. Придет понимание, как можно начать с transaction script и в итоге постепенно катиться в сторону domain layer, через active record или не через active record если это когда-нибудь понадобится и тому подобное. Cтанет понятно, зачем, как и когда использовать патерны о которых написал Мартин Фаулер в своей книге Patterns of Enterprise Application Architecture.

    Полученные знания можно применить к любому языку. В том числе и PHP. Будет хорошо, если уровень этого сообщества хоть чуть-чуть будет подтягиваться к уровню Java, вместо того чтобы бомбить пятиуровневые ифы создавая такую цикломатическую сложность, что все метрики кода горят ярче красного.
    Ответ написан
    Комментировать
  • Как вы проектируете классы в ООП и их взаимодействие?

    Adamos
    @Adamos
    Делите ТЗ на модули, определяете их внешние интерфейсы (то, что одни модули могут запрашивать у других), стараетесь их минимизировать.
    Например, модуль авторизации и аутентификации - это много всего внутри, но снаружи - только общие данные юзера (для вывода) и возможность узнать, авторизован он или нет. Если реализованы права пользователей - то прочим модулям совершенно не нужно знать, как именно (например, принадлежит ли пользователь к какой-то группе). Им нужно узнать, есть ли у него конкретный уровень доступа к конкретному модулю или нет.
    Когда определились с модулями - делаете внутри каждого из них аналогичное разбиение на классы: сначала интерфейс, потом потроха.
    И только перейдя к реализации каждого класса, можете обернуться на свою процедурщину и посмотреть - есть ли код, который можно оттуда использовать как сырье для методов класса.
    Ответ написан
    Комментировать
  • Как правильно вести разработку своего проекта?

    mashletov
    @mashletov
    Math.random()
    1. Стоит найти золотую середину. А то можно растечься мыслью по древу и год делать hello world.
    2. В целях самообучения — правильно. В целях коммерческой разработки — неправильно. Я вот, например, сейчас в webgl делаю вращающийся куб с 0. Пытаюсь понять как это все работает. Парсю obj-файл сам. В тоже время, существует TREE.js где все это уже давно реализованно и куда лучше.
    3. По разработке сайта: пишу сам (используя фреймворк, конечно). Но, если мне, например, надо подключить платёжную систему / смс / и т. д. — я лезу на github, ведь там гораздо лучше решения, созданные сообществом, чем я смогу сделать
    Ответ написан
    Комментировать
  • Как проверить работоспособность сайта на новой версии php?

    DevMan
    @DevMan
    загнать проект в phpstorm, указать в настройках php7, читать ошибки.
    Ответ написан
    3 комментария
  • Стоит ли изучать MVC не зная ООП?

    slo_nik
    @slo_nik Куратор тега PHP
    Добрый день.
    или стоит выучить ООП и только потом посмотреть данный плейлист?

    Да, ознакомьтесь сначала с документацией по php.
    Затем можете приступить к ознакомлению с основами ООП. Так же перечитайте всё, что идёт в дополнении к курсу, ссылку найдёте внизу страницы.
    Потом посмотрите вот эти видео.
    Изучите парочку frameworko-в.
    После всего этого можете приступать к написанию чего-либо.
    Ответ написан
    Комментировать
  • PHP: как сделать так, чтобы аргумент мог принять только одно из определённых значений?

    Wolfnsex
    @Wolfnsex Куратор тега PHP
    Если не хочешь быть первым - не вставай в очередь!
    Мне почему-то кажется, что должно существовать какое-то более грамотное решение.

    Возможно, вот такое:
    if(in_array($arg, ['foo', 'bar', 'baz'])) {
        // ...
    }
    Ответ написан
    2 комментария
  • PHP: автозагрузка классов. Объясните на пальцах на простом примере?

    gobananas
    @gobananas
    finishhim.ru
    Оба автозагрузчика грузят только те классы, которые присутствуют (объявлены new) в этом php-файле:

    // Определяем место где лежат файлы классов, которые будем загружать
    define('DIR',  __DIR__);
    define('APP',  DIR.'/app');
    
    // Устаревший вариант
    function __autoload($class) {
        include APP. '/'. $class . '.php';
    }
     
    // Актуальный вариант с безымянной функцией
    spl_autoload_register(function ($class) {
        include APP. '/' . $class . '.php';
    });
     
    $obj1  = new MyClass1();
    $obj1->displayVar();


    В вашем примере
    namespace something\base;
    use something\models\Login;
    вы определяете пространство имён и говорите его использовать словом use
    Ответ написан
    5 комментариев
  • Что нужно знать про ООП?

    Tomio
    @Tomio
    backend developer (python, php)
    Изучая ООП вам нужно будет понять:
    1. основные принципы ООП: инкапсуляция, полиморфизм, наследование. И еще почитайте про абстракцию.
    2. отличие self от static. Почитать про раннее и позднее статическое связывание
    3. принципы SOLID
    4. смысл инъекции зависимостей (Dependency Injection) и инверсии зависимостей (Dependency Inversion - один из принципов SOLID)
    5. основные шаблоны проектирования (design patterns)

    Ну и научитесь думать абстрактно) Не завязывайтесь на реализации, прорабатывайте интерфейсы.
    Ответ написан
    18 комментариев