понедельник, 16 марта 2015 г.

Закавыки PHP (часть 1)

Часть 2 - http://ph4n70m.blogspot.ru/2015/10/php-2.html

Недавно всем офисом проходили тест на PHP на сайте https://tests4geeks.com. Ресурс очень хороший, правда платный, но два теста бесплатные. Хорош тем, что угрожает в случае копипасты или альт-таба и прочего читинга заблокировать тест и не дать закончить.

Поэтому этот тест вдохновил на публикацию подобных "заковыристых" вопросов и ответов на них с комментариями:

Область видимости

Какова область видимости функции inner()?
<?php
function outer() {
    function inner() {
    }
}

?>

* Только из outer
* Из любого места после вызова outer
* Из любого места

Здесь ничего сложного. Область видимости вполне естественна для многих языков.

Как начать сессию в PHP?

* session_start()
* session_set()
* session_register()
* Используя $_SESSION

Сессию стартуем именно этим вызовом. Ставим потом переменные через $_SESSION

Что делает такой скрипт?

<?php
$id = 3;
$str = "active$id";
$$str = 1;
?>

* Присваивает $str = 'active3'
* Присваивает $str = 1
* Объявляет новую переменную active3
* Ничего, всё неправильно.

По итогу $str = 'active3' и $active3 = 1; Конструкция $$ используется как "указатель" в Си. Т.е. получаем значение по $str и вторым $ уже получаем вторую переменную по этому имени.

Зачем мы используем <<< в PHP?

* Обявлять регулярки
* Как echo
* Объявлять строковые переменные

Обычный heredoc синтаксис

Могут ли быть функции в PHP перегружены или переопределены?

* Да
* Нет

Function signatures are based only on their names and do not include argument lists

Как в PHP получить список заголовков ответа?

* headers_list()
* headers_send()
* headers_getAll()
* headers()

headers_listВозвращает список переданных (или готовых к передаче) заголовков

Какие из этих структур не доступны в PHP?

* Множественное наследование
* Абстрактные классы
* Публичные и приватные методы
* Интерфейсы

Остальное вроде есть. Поправьте, если я неправ.

Для чего используется mysql_pconnect()?

* Возвращает ид текущего соединения, перед открытием нового
* Создаёт постоянное соединение к серверу
* Подключиться к mysql серверу
* Ничего из вышеперечисленного

Всё легко гуглится по названию функции

Может ли echo принимать больше одного параметра?

* Да
* Нет

echo - не функция, а конструкция языка, поэтому скобки не обязательны и параметры передаются через запятую

Что выведет скрипт?

<?php
function get_sum() {
     global $var;
     $var = 5;
}

$var = 10;
get_sum();
echo $var;

* 5
* 10
* 15
* NULL

Вроде как global переменные даже в php 5.3 (?) запретили по дефолту, но вопросы по ним остаются. Ни разу в работе не использовал такой приём.

1 комментарий: