php56 вопросы


# запускаем фоновый процесс пхп
php -r 'passthru(\"nohup sleep 60 >/dev/null 2>/dev/null &\");'
# nohup - запуск в  фоне 
php -r "shell_exec(\"nohup sleep 60 >/dev/null 2>/dev/null &\");"
# межпроцессорные потоки 
php -r "\$proc=popen(\"sleep 50 2>&1 &\", \"w\"); fwrite(\$proc, 50); pclose(\$proc);"
# не блокирует процесс-родитель
<?php
$spec = [
    0 => ["pipe", "r"],  // stdin
    1 => ["pipe", "w"],  // stdout
];
// Запускаем процесс
$proc = proc_open("php 1.php > 1.log", $spec, $pipes);https://front-line-php.com/cheat-sheet
 
 

https://front-line-php.com/cheat-sheet

 

 

# выборка случайных записей
$row_count = mysql_result(mysql_query('SELECT COUNT(*) FROM tTable;'), 0);
$query = array();
while (count($query) < 10) {
    $query[] = '(SELECT * FROM tTable LIMIT '.rand(0, $row_count).', 1)';
}
$query = implode(' UNION ', $query);
$res = mysql_query($query);

 

Сортировка пузырьком

  for ($i = 0; $i < count($m); $i++) {
      for($j=$i; $j < count($m); $j++) {
          if ($m[$i] > $m[$j]) {
              $tmp = $m[$i];
              $m[$i] = $m[$j];
              $m[$j] = $tmp;
          }
      }
  }

 Поиск по массиву

    $ar = [];
    foreach ($data as $el) {
        if (isset($el["lastName"])  && preg_match("/($search|$search2)/mui", $el["lastName"])) {
            $ar[] = $el;
        }
    }
    return $ar;
    
    // $ar = [];
    // foreach ($data as $el) {
    //     if (isset($el["lastName"])  && in_array(mb_strtolower($el["lastName"]), [$search, $search2])) {
    //         $ar[] = $el;
    //     }
    // }
    // return $ar;   

 

я думаю так: должна быть какая-то тривиальная задача, типа написать rest api для того же кинотеатра и смотреть что выйдет
джун не знает как решать задачу
мидл знает только одно решение задачи и возможно сможет это обосновать
сеньор может предложить несколько вариантов задачи и обосновать каждый, типа в условиях окружения предложить самый оптимальный
 
 
Как сохранить порядок полей объекта сериализованного в JSON ?
 
 
 
<?php
  echo true + true;
?>
<script>
  var a ='5' - 3;
  var b ='5' + 3;
  var c ='5' + - 3;
  alert(a);
  alert(b);
  alert(c);
</script>
 
 
1) Расскажите о замыканиях в PHP. Приведите примеры, когда, почему и как они могут быть использованы?
замыкания специальный тип анонимных функций, которые позволяют сохранить переменные на момент их вызова

2) Расскажите о пространствах имён в PHP и о том, почему они полезны

3) Что такое трейты (traits)? Опишите их основные характеристики и расскажите, чем они полезны. Приведите пример объявления трейты и класса, использующего несколько трейтов.

4) Расскажите, как связаны между собой php://input и $POST и как получить доступ к потоку php://input?
5) Назовите не менее пяти суперглобальных переменных, имена которых начинаются с $
, и дайте им определение. Расскажите об их связи с переменной $GLOBALS.
6) Объясните назначение и применение магических методов get, set, isset, unset, call, и callStatic. Когда, как и почему их стоит использовать (или не использовать)?
7) Чему будет равен $x после выполнения выражения $x = 3 + ‘15%‘ + ‘$25‘?
8) Объясните назначение ключевого слова static при вызове метода или обращении к свойству. Расскажите, когда и зачем его нужно использовать, а также чем оно отличается от ключевого слова self. Приведите пример.
9) Что такое генераторы? Когда их можно использовать вместо итераторов и обычных массивов? Для чего нужны ключевые слова yield и send?
генераторы — это функции, содержащие ключевое слово yield и позволяющие создавать собственные итераторы, которые потом удобно использовать в циклах foreach.

10) Паттерны проектирования. Какие паттерны проектирования вы знаете? Какие часто используете? Опишите любой на выбор паттерн проектирования.
11) Что такое абстрактные классы и интерфейсы? В чем их различие?
12) Что такое Service Locator и DI? для чего они используются в Yii?
13) Что такое Active Record, зачем он нужен?
14) Какие способы доступны в Yii для защиты от всевозможных атак (XSS, CSRF, SQL injection)
15) Какие бывают индексы и для чего они нужны?
16) Что такое транзакция?
17) Какие движки Mysql вы знаете, зачем они нужны? 
 
 
 
 
 
В PHP 7.1 появилось несколько очень приятных нововведений: тип void для возвращаемых значений, iterable, возможность вернуть null для типизированных возвращаемых значений, область видимости констант и прочее
 
 
 
 
 
 
 . Чтобы такого не было, взрослые умные дядьки описали стандарт, который позволяет подключать сторонние библиотеки без проблем, главное чтобы организация классов в них соответствовала стандарту PSR-0 (устарел уже лет 10 как) или PSR-4. В чём суть требований описанных в стандартах:

  1. Каждая библиотека должна жить в собственном пространстве имён (т.н. vendor namespace)
  2. Для каждого пространства имён должна быть создана собственная папка
  3. Внутри пространства имён могут быть свои подпространства — тоже в отдельных папках
  4. Один класс — один файл
  5. Имя файла с расширением .php должно точно соответствовать имени класса
 — ООП – абстракция,наследование, инкапсуляция и полиморфизм
Инкапсуляция – это когда переменные в объекте, а доступ к ним через методы.
Полиморфизм – возможность описывать разные методы, с одинаковым именем . для параметров int и float, в php нормального полиморфизма нет.
Наследование – копирование свойств и методов базовых классов, с возможностью их переопределения и расширения.
Абстракция – создание свойств, методов, классов, которые обязательно должны переопределяться наследниками до непосредственного использования.
 
 
10. Что такое класс?
Класс - это модель ещё не существующей сущности (объекта). Класс фактически описывает ус-
тройство объекта, являясь своего рода чертежом.
 
11. А объект?
Объект - это совокупность данных и методов для их обработки. Данные и методы называются
членами класса. Вообще, объектом является все то, что поддерживает инкапсуляцию.
 
12. Чем отличается класс от объекта?
Класс - это тип данных, а объект - экземпляр типа класс.
 
4. Что такое виртуальный метод?
Виртуальный метод в объектно-ориентированном программировании - это метод класса, кото-
рый может быть переопределён в классах-наследниках так, что конкретная реализация метода
для вызова будет определяться во время исполнения. Виртуальные методы - один из важней-
ших приёмов реализации полиморфизма.
 А зачем такое нужно?
Чтобы программисту необязательно было знать точный тип объекта для работы с ним через
виртуальные методы, достаточно лишь знать, что объект принадлежит классу или наследнику
класса, в котором метод объявлен.
Виртуальные методы позволяют создавать общий код, который может работать как с объекта-
ми базового класса, так и с объектами любого его класса-наследника. При этом базовый класс
определяет способ работы с объектами и любые его наследники могут предоставлять конкрет-
ную реализацию этого способа.
 
9. Может ли быть конструктор виртуальным?
Нет, конструкторы не могут быть виртуальными.
 
 
 
7. Как называется способность объекта скрывать свои данные и реализацию от других объектов системы?
Инкапсуляция.
 
8. Какие механизмы в ОО языках обычно позволяют обеспечить инкапсуляцию объектов?
Модификаторы доступа.
 
 
 
5. В чем различия между четвертой и пятой версиями PHP?
Дурацкий и явно устаревший вопрос, но его почему-то до сих пор задают. Перечислять все, не
нужно, достаточно сказать, что:
В пятой версии были добавлены следующие возможности:
- ключевое слово static
- Ключевое слово final
- Абстрактные классы
- Интерфейсы
- Магические методы
- Клонирование объектов
И многое другое.
Всё это благодаря использованию движка Zend Engine 2.
 
 
9. Что такое static функция и чем она отличается от “обычной” (не static)?
Static принадлежит классу, а не экземпляру класса. И вызывается у класса, а не у объекта, т.е.
напрямую.
 
15. Поддерживает ли РНР множественное наследование?
Нет, PHP не поддерживает множественное наследование. То есть у производного класса может
быть только один родительский. Но с помощью “магической” функции __call() его можно эмули-
ровать.
 
16. Какая разница между require(), require_once(), include() и include_once()?
Отличие между require() и include() следущее: require() возвращает FATAL ERROR, если файл не
найден, include() же возвращает только WARNING
В отличие от конструкции require конструкция include позволяет включать файлы в код PHP скрипта во времявыполнения сценария. Синтаксис конструкции include выглядит следующим образом:
Таким образом, целесообразнее использовать конструкцию require там, где не требуется динамическое включение файлов в сценарий, а конструкцию include использовать только с целью динамического включения файлов в код PHP скрипта.
 
18. Что делает функция eval() ?
eval() вычисляет строку как PHP-код.
 
27. Есть ли разница между одинарными и двойными кавычками в PHP?
В двойных кавычках данные “парсятся”, а в одинарных - нет.
18. Можно ли создать экземпляр абстрактного класса?
Если язык программирования позволяет, то можно, например в Delphi. Но, поскольку, мы гово-
рим о РНР, то создать экземпляр абстрактного класса нельзя.
 
19. Какая разница между абстрактным классом и интерфейсом?
Один из самых любимых вопросов!
Абстрактный класс - это класс, который имеет хотя бы 1 абстрактный (не определенный) метод
и обозначается как abstract. Интерфейс - такой же абстрактный класс, только в нем не может
быть свойств и не определены тела у методов.
Кроме того, что абстрактный класс наследуется (etxends), а интерфейс реализуется (implements).
Вот и возникает разница между ними, что наследовать мы можем только 1 класс, а реализовать
сколько угодно.
 
20. Зачем нужен интерфейс, если есть абстрактный класс?
Затем, что можно унаследоваться только от одного абстрактного класса, но реализовать мно-
жество интерфейсов. Плюс, в качестве приятного довеска, ВСЕ методы, описанные в интерфей-
се, ДОЛЖНЫ быть реализованы в классе, а в абстрактном классе их нужно для этой цели специ-
ально отмечать
 
 
 
 
 
15. Чем отличается процедурный подход от объектно-ориентированного?
Процедурный подход предоставляет возможность программисту определять каждый шаг в
процессе решения задачи. Задачи разбиваются на шаги и решаются шаг за шагом. Кроме того
данные лежат отдельно от функций, для каждой новой сущности приходится писать свой набор
функций с немного другими именами.
А ООП предполагает заключение внутри одного класса, как данных, так и методов их обработки.
При этом создание новой сущности не вызывает необходимости переписывать все методы, а
только нужные (это называется “наследование”).
16. Какие еще есть парадигмы (модели, подходы) программирования кроме ООП?
Из тех, что наиболее часто встречаются: функциональная, аспектно-ориентированная и процедурная.
 
 
 
15. Поясни разницу между HTTP методами GET и POST.
GET передает данные серверу используя URL, а POST передает данные, используя тело HTTP
запроса.
Длина URL’а ограничена 1024 символами, что и будет верхним пределом для данных, которые
можно отослать GET’ом. POST может отправлять гораздо большие объемы данных.
Кроме того, передача данных методом POST более безопасна, чем методом GET, так как секрет-
ные данные (например пароль) не отображаются напрямую в web-клиенте пользователя (в от-
личии от URL, который виден почти всегда).
 
16. А какие еще есть методы кроме GET и POST и для чего они используются?
GET и POST - это основные методы передачи данных. Есть еще PUT и DELETE, но ими никто не
пользует
 
  
Денормализация бд нужна чтобы улучшить время выборки. Денормализацию делают только в нормализованной бд.