Ответы пользователя по тегу PHP
  • Почему protected и private методы значительно медленнее чем public?

    выбирать модификаторы доступа из соображений оптимизации - мягко говоря не самый мудрый подход.
    Ответ написан
    Комментировать
  • Как найти и заменить блоки текста (HTML-кода) в базе данных MySQL?

    1. sql - select все страницы from database
    2. php foreach это все
    3. php -регуляркой проверять наличие формы
    4. php -регуляркой же заменять
    5. sql - update record in database
    Ответ написан
    Комментировать
  • Чем отличаются эти две статьи (полиморфизм, PHP)?

    код в статьях не отличается ничем.
    за каким чертом автор №2 решил выпендриться, и объяснить "Что такое полиморфизм на самом деле" с использованием абсолютно такого же примера - останется тайной на века.
    лично меня ни один толком не убедил.

    попробую привести собственный пример:
    <?php 
    
    // базовый класс публикации
    // имеет свойства для заголовка и тела
    // умеет отдавать контент в простейшем виде
    class Publication {
      protected $_header;
      protected $_body;
      
      public function __construct($header, $body) {
        $this->_header = $header;
        $this->_body = $body;
      }
    
      public function getContent() {
        return 
          '<h1>' . $this->_header .  '</h1>' . 
          '<p>' . $this->body . '</p>';
      }
    }
    
    // статья в дополнение имеет еще свойство для имени автора
    // конструктор переопределен для задания имени автора
    // метод getContent переопределен, чтобы дописывать под заголовком статьи имя автора
    class Article extends Publication {
      protected $_author;
      
      public function __construct($header, $body, $author) {
        parent::__construct($header, $body);
        
        $this->_author = $author;
      }
    
      public function getContent() {
        return 
          '<h1>' . $this->_header .  '</h1>' . 
          '<br /><br/ >'. 
          'By ' . $this->author . 
          '<br /><br/ >'. 
          '<p>' . $this->body . '</p>';
      }
    }
    
    // объявление переопределяет только метод getContent 
    // заворачивает вывод в блок определенного класса - так объявление заметнее
    // но сам контент генерируется родительским методом
    class Announcement extends Publication {
      public function getContent() {
        return 
          '<div class="announcement">' . 
            parent::getContent() . 
          '</div>';
      }
    }
    
    // а вот короткая новость, например, не переопределяет метод getContent
    // он ей подходит как есть
    // она только с данными немного шаманит
    class ShortNews extends Publication {
      public function __construct($header, $body) {
        $this->_body = substr($header, 0, 31);
        $this->_body = substr($body, 0, 255);
      }
    }
    
    // а вот и принтер
    // принтер печатает публикации
    // ему пофиг, какие именно - хоть короткую новость мы его попросим напечатать, хоть объявление
    // он знает, что у любой публикации есть метод getContent, результат которого можно напечатать
    // потому что объекты классов статья/объявление/короткая новость - они одновременно и объекты класса публикация
    // это и есть полиморфизм
    class PublicationPrinter {
      public static function print(Publication $publication) {
        print($publication->getContent());
      }
    }
    Ответ написан
    Комментировать
  • Как отформатировать шестизначное число по 2 числа через точку?

    php.net/manual/en/function.number-format.php

    upd. Пардон, это только по разрядам разбивает, по 3.

    во: chunk_split($number, 2, ' ');
    Ответ написан
    Комментировать
  • Как сделать генератор словосочетаний на PHP?

    $words1 = file('firstword.txt');
    $words1MaxIndex = count($words1) - 1;
    
    $words2 = file('secondword.txt');
    $words2MaxIndex = count($words2) - 1;
    
    $randomPhrase = $words1[mt_rand(0, $words1MaxIndex)] . ' ' . $words2[mt_rand(0, $words2MaxIndex)];
    Ответ написан
    1 комментарий
  • Как вывести строку из ячейки?

    $x = ".54..76..21..34.";
    preg_match_all('/\.(\d+)\./', $x, $out);
    print_r($out[1]);


    Array
    (
        [0] => 54
        [1] => 76
        [2] => 21
        [3] => 34
    )


    но вообще конечно за такой формат надо ноздри вырывать.
    Ответ написан
  • Что тут не так?

    $strSQL = "SELECT login FROM users WHERE userid in ('23,54,31')";

    здесь то, что внутри скобок - строка
    $strSQL = "SELECT login FROM users WHERE userid in (23,54,31)";

    а здесь - список значений

    короче, лишние одинарные кавычки тут
    Ответ написан
    Комментировать
  • Как создать шаблонную структуру в PHPStorm?

    Может, проще небольшой .sh/.bat написать?
    Ответ написан
    Комментировать
  • Как повторять цикл foreach с шагом?

    надеюсь я правильно понял вопрос =)
    $names = range(1, 33);
    $total = count($names);
    $size = 7;
    
    for ($i = 0; $i < 500; $i++) {
      if (!isset($offset) || $offset >= $total) {
        $offset = 0;
      }
    
      $slice = array_slice($names, $offset, $size);
      do_whatever_you_need_with_the_slice($slice);
    
      $offset += $size;
    }
    
    function do_whatever_you_need_with_the_slice($slice) {
      echo implode('|', $slice) . '<br>';
    }


    выводит:
    1|2|3|4|5|6|7
    8|9|10|11|12|13|14
    15|16|17|18|19|20|21
    22|23|24|25|26|27|28
    29|30|31|32|33
    1|2|3|4|5|6|7
    8|9|10|11|12|13|14
    15|16|17|18|19|20|21
    22|23|24|25|26|27|28
    29|30|31|32|33
    ...
    1|2|3|4|5|6|7
    8|9|10|11|12|13|14
    15|16|17|18|19|20|21
    22|23|24|25|26|27|28
    29|30|31|32|33
    ... и так далее
    Ответ написан
    Комментировать
  • Кто предоставит помощь в написании циклом рекурсивного алгоритма построения дерева масива?

    class StaticElementContainer {
      protected static $_elements = array();
    
      public static function getElements() {
        return self::$_elements;
      }
    
      public function addElement($id, $arg1, $arg2, $parents = array()) {
        if (empty($parents)) {
          self::$_elements[$id] = self::_prepareElement(array($arg1, $arg2));
        }
        else {
          $_elements = &self::$_elements;
          while ($parents) {
            $parent = array_shift($parents);
            if (!isset($_elements[$parent])) {
              $_elements[$parent] = self::_prepareElement();
            }
    
            $_elements = &$_elements[$parent]['sub'];
          }
    
          $_elements[$id] = self::_prepareElement(array($arg1, $arg2));
        }
      }
    
      protected static function _prepareElement($main = array(), $sub = array()) {
        return array(
          'main' => $main,
          'sub' => $sub,
        );
      }
    }
    
    $test = new StaticElementContainer();
    $test->addElement('id_1','arg1','arg2');
    $test->addElement('id_2','arg1','arg2');
    $test->addElement('id_5','arg1','arg2', array('id_2','id_3','id_4'));
    
    print_r(StaticElementContainer::getElements());


    выводит:
    Array
    (
        [id_1] => Array
            (
                [main] => Array
                    (
                        [0] => arg1
                        [1] => arg2
                    )
    
                [sub] => Array
                    (
                    )
    
            )
    
        [id_2] => Array
            (
                [main] => Array
                    (
                        [0] => arg1
                        [1] => arg2
                    )
    
                [sub] => Array
                    (
                        [id_3] => Array
                            (
                                [main] => Array
                                    (
                                    )
    
                                [sub] => Array
                                    (
                                        [id_4] => Array
                                            (
                                                [main] => Array
                                                    (
                                                    )
    
                                                [sub] => Array
                                                    (
                                                        [id_5] => Array
                                                            (
                                                                [main] => Array
                                                                    (
                                                                        [0] => arg1
                                                                        [1] => arg2
                                                                    )
    
                                                                [sub] => Array
                                                                    (
                                                                    )
    
                                                            )
    
                                                    )
    
                                            )
    
                                    )
    
                            )
    
                    )
    
            )
    
    )


    избегайте называть переменные одной буквой
    и делать функции которые принимают больше 2 параметров
    Ответ написан
    Комментировать