Задать вопрос
  • Parser php oracle не пишет в БД?

    @Kerm
    Попробуй вот так:

    require_once "simple_html_dom.php";
    
    error_reporting(E_ALL);
    ini_set('display_errors', '1');
    $conn = oci_connect('ddd', 'ddd', '127.0.0.1/orcl', 'AL32UTF8');
    
    
    $brands = array();
    
    $html = str_get_html(file_get_contents('https://kolesa.kz/cars/'));
    $i = 'INSERT INTO kolesa_brands (id, name) VALUES';
    $select = $html->find('select[id=auto-car-mm-0]', 0);
    
    foreach($select->find('option') as $opt)
    {
    	if($opt->value == '') continue;
    	$i .= ' ('.$opt->value.', \''.$opt->plaintext.'\'),';
    	$brands[$opt->value] = $opt->plaintext; 
    }
    
    $insert = oci_parse($conn, rtrim($i, ',').';');
    
    oci_execute($insert);
    Ответ написан
  • Как уменьшить себестоимость разработки сайта?

    alex-1917
    @alex-1917
    Если ответ помог, отметь решением
    Самое дорогое, что есть в этом мире - это время

    вы себя не слышите:
    spoiler
    Как уменьшить себестоимость

    какие еще плюшки могут ускорить
    Ответ написан
    8 комментариев
  • Роуты в Laravel?

    JhaoDa
    @JhaoDa
    LaravelRUS Team
    В api.php? Да не, это было бы слишком просто, ты же в него заглянул, не мог не заглянуть. Или мог?

    Роуты могут быть описаны где угодно — в конфигах, провайдерах, БД — зависит от задач и фантазии автора.
    Ответ написан
  • Как выставить интервал помесячно?

    usdglander
    @usdglander
    Yipee-ki-yay
    Используйте относительные форматы first day of previous month и last day of previous month.
    Ответ написан
    Комментировать
  • Нужен движок для создания закрытой таблицы?

    Sanes
    @Sanes
    Программист вам нужен, а не движок. Из такой, казалось бы примитивной задачи можно раздуть слона.
    Ответ написан
    Комментировать
  • Как исправить ошибку PHP PDO?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Ну если "в переводя" и так понятно, то какой смысл еще и на тостер идти?
    Ответ написан
    9 комментариев
  • Правильно ли делать такую структуру проекта?

    usdglander
    @usdglander Куратор тега PHP
    Yipee-ki-yay
    Для начала делайте как делается, а не как правильно. Всякие RightWay потом учить будете. Пока вам нужно получить общие представления как всё работает, набить СВОИХ шишек и уже с пониманием всего переходить к "тяжёлой артиллерии".
    Ответ написан
    4 комментария
  • Как подключить почту для домена на openserver?

    @sidni
    Php Developer
    Насколько я помню если письма отправляются с помощью функции mail то они сообщения храняться в текстовых файлах. в папке примерно userdata/tmp/email
    если хочется "реальных писем" то нужно в настройках указать smtp сервер чтоб письмо шло через вашу почту (гугл, яндекс, маил)
    Ответ написан
    Комментировать
  • Обнуление поля таблицы, если значение из другого поля отсутствует во второй таблице?

    @nozzy
    Symfony, Laravel, SQL, Python, Telegram
    update table1 t1
    left join table2 t2 on t2.`name` = t1.`name`
    set t1.`name` = null
    where t2.`name` is null
    Ответ написан
    2 комментария
  • Как добавить эффекты в тексте?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Тостер - это не форум, здесь всё это не к месту.
    Ответ написан
    Комментировать
  • Как поместить массив в другой массив?

    @ar2rsoft
    PHP-developer
    $create_data = array(
      array(
        'id', 'title', 'description','price', 'condition', 'link','availability', 'image link', 'brand','color', 'size', 'gender','google product category', 'product type',
      ),
    );
    foreach ($arr as $item) {
    $create_data[] = $item; 
    }


    Хотя логичнее, просто в массив arr положить первой строкой заголовки
    Ответ написан
    1 комментарий
  • Как проверить наличие фразы в начале текста php?

    usdglander
    @usdglander Куратор тега PHP
    Yipee-ki-yay
    if (strpos($text, 'id') === 0) {
        //id вначале
    }
    Ответ написан
    Комментировать
  • Как побороть ошибку required parameter $query missing?

    @green_goo
    https://www.php.net/manual/ru/mysqli.query.php
    Обратить внимание на число обязательных аргументов в документации, и сравнить с числом параметров в приведенном коде

    PS. не нужно 1 и тот же запрос выполнять 2 раза.
    Ответ написан
    2 комментария
  • Как вызвать метод родителя в php?

    hack504
    @hack504
    parent::foo()
    Ответ написан
    Комментировать
  • Можно ли сократить код?

    usdglander
    @usdglander Куратор тега PHP
    Yipee-ki-yay
    Вам необходимо познать рекурсию.

    upd
    Когда познаете, нужно будет написать функцию, которая:
    1. Определяет есть ли следующий уровень вложенности и если есть, то выбирает этот уровень и производит вызов самой себя с этим уровнем.
    2. Если следующего уровня нет, то возвращает контент из текущего уровня.
    Ответ написан
    Комментировать
  • Можно ли сократить код?

    @EvgeniiR
    https://github.com/EvgeniiR
    /**
     * @param Text|TextRun $arg
     */
    function printText($arg): void {
      if($arg instanceof TextRun) {
        foreach($arg as $el) { printText($el); }
      } elseif ($arg instanceof Text) {
        echo $arg->getText();
      } else { 
        throw new \InvalidArgumentException('...');
      }
    }
    Ответ написан
    Комментировать
  • Как сделать unit test метода в котором нужен заполненный массив?

    Maksclub
    @Maksclub Куратор тега PHP
    По-хорошему $this->solutions должно устанавливаться через конструктор, потому вам не составит труда заинжектить это состояние в тестируемый объект.

    Если у вас "пришлось", то можете заюзать некий хак, например через рефлексию/closure::bind установить состояние в тестируемый объект.

    Вот на скорую руку накидал (Разместите его в своем TestCase или прямо в тесте)
    protected function setPrivateProperty(object $object, string $propertyName, $value): void
    {
        $reflectionClass = new \ReflectionClass(get_class($object));
        $property = $reflectionClass->getProperty($propertyName);
        
        $property->setAccessible(true);
        $property->setValue($object, $value);
        $property->setAccessible(false);
    }


    ПРИМЕР
    Класс и метод, который нужно протестить и приватная переменная которого заполняется не через конструктор
    class System 
    {
        // Не важно, как оно будет заполнено, важно, 
        // что в методе мы проверяем некоторые значения  
        // и мы создадим ниже в тестах эти ситуации разными тест-кейсами
        private $solutions;
    
        public function checkRecords(): string
        {
            if (count($this->solutions) === 3) {
                return 'full';
            }
    
            if (count($this->solutions) === 6) {
                return 'overflow';
            }
    
            throw new IncorrectCountException('Incorrect solutions count.');
        }
    }


    Тесты
    public function testCheckRecordsFull(): void
        {
            // 3 элемента
            $data = [1, 2, 3];
            $system = new System();
            $this->setPrivateProperty($system, 'solutions',  $data);
    
            $status = $system->checkRecords();
    
            $this->assertEquals('full', $status);
        }
    
        public function testCheckRecordsOverFlow(): void
        {
            // 6 элементов
            $data = [1, 2, 3, 4, 5, 6];
            $system = new System();
            $this->setPrivateProperty($system, 'solutions',  $data);
    
            $status = $system->checkRecords();
    
            $this->assertEquals('overflow', $status);
        }
    
        public function testCheckRecordsIncorrectCOunt(): void
        {
            // сколько-то элементов, но не 3 и не 6
            $data = [1];
            $system = new System();
            $this->setPrivateProperty($system, 'solutions',  $data);
    
            $this->expectException(IncorrectCountException::class);
            $system->checkRecords();
        }

    Код тестовый, просто отобразить принцип, возможно у вас в классе зависимости -- нужно будет сделать моки и т.д. Тут некоторые повторения можно вынести в setUp().
    Также хочу обратить внимание, что тесты построены по принципу ААА (Arrange, Act, Assert).
    Как итог, 3 ситуации, все протестированы, методу не важно, как заполнлась приватная переменная, но вся его логика протестирована. Все легко и просто.
    Ответ написан
    7 комментариев
  • Зачем использовать callback функции?

    Maksclub
    @Maksclub Куратор тега PHP
    Крайне хорошее описание по таким вещам есть в Википедии. А теперь к примерам:

    1. Передача параметром
    Такие функции удобно передавать параметром/возвращать из других функций. Тут лучше углубиться в тему: Функция высшего порядка

    Например для удобной передачи асбтрактной функциональности, которая будет применяться например к каждому члену итератора/массива. Это используется например в таких стандартных функциях array_{map/filter/reduce}. В коллбеке то, что будет применяться к каждому члену массива.

    Вообще функции высшего порядка не просто "пример использовани", а даже целая концепция программирования.

    2. Отложенный/ленивый вызов
    Например в PHP приложениях используется в роутерах/контейнере/логере, да много где. Суть в том, что в соллбеке спрятана функциональность, иногда очень большая. Элементов и этих фукцниональности тоже может быть много, а нужно все зарегистрировать. Чтобы не плодить тысячи объектов при регистрации — каждый кусочек функциональности заворачивают в коллбек, и только при вызове (например роута), вызывается коллбек и соответственно все, что в нем начинает работать.

    class Container
    {
         private $callableServices;
    
         public function add(string $serviceName, callable $service)
         {
              $this->callableServices[$serviceName] = $service;
         }
    
         public function get(string $serviceName)
         {
              $service = $this->callableServices[$serviceName];
    
              return $service();
         }
    }
    
    $container = new Container();
    // объект тут не создается, тк он внутри функции, которая не вызывается
    $container->add('a', function() {
         return new FirstBigService();
    });
    // объект тут не создается, тк он внутри функции, которая не вызывается
    $container->add('b', function() {
         return new SecondBigService();
    });
    
    // Внутри метода get() идет не просто доставание нужного элемента, 
    // а еще и его вызов (тк лежат функции), то есть именно сейчас 
    // произойдет new FirstBigService()
    $service = $container->get('a');


    3. Изоляция контекста
    // тут левый код
    ...
    
    // Код ниже работает изолировано и на него ничего не может подействоват,
    // т.к. внутри свой контекст
    (function() {
        $app = new Application();
        $app->run();
    });
    Ответ написан
    Комментировать
  • Какую использовать функцию для выборки из массива?

    Tomio
    @Tomio
    backend developer (python, php)
    $arr = [
    22 => 'one',    
    322 => 'two',   
    42 => 'three',   
    55 => 'four',   
    76 => 'five',   
    21 => 'six',   
    34 => 'seven',   
        ];
    
    $myKeys = [42, 76, 21];
    
    $newArr = array_filter($arr, function($key) use ($myKeys) {
        return in_array($key, $myKeys);
    }, ARRAY_FILTER_USE_KEY);
    
    print_r($newArr);
    /** result
    
    Array
    (
        [42] => three
        [76] => five
        [21] => six
    )
    **/
    Ответ написан
    1 комментарий
  • Ubuntu linux как переместить папку на другой жесткий диск?

    flapflapjack
    @flapflapjack
    на треть я прав
    Нет на линуксах дисков B.

    Напишите сюда вывод lsblk и mount сперва, потом поговорим
    Ответ написан
    1 комментарий