Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: PHP Test by PHP.SU [2]
Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007 Откуда: Berlin
Помог: 707 раз(а)
Модифицируем задачу.
0. Нельзя использовать bindTo (PHP может быть версии 5.3)
1. Нельзя использовать classkit (он может быть не установлен)
2. Класс выглядит так:
0. Ошибка. Нельзя напрямую создать объект типа Closure
1. Только щас допер как сделать
function get_var_name($var){
return array_search($var, $GLOBALS, true);
}
2. -
3. true. Так как Foo общий тип для Bar.
4. Интересный вопрос. Не могу выбрать между true и 3. Но рискну - ответ 3.
5. Что то типо Object[1]{sItem = bar}. Свойства можно создавать динамически, если не предусмотрен метод перегрузщик (перехватчик) __set. Следовательно все публичные и защищенные свойства родителя видны потомку.
Грызут сомнения, что вместо $sItem подставится foo, но все же ответ прежний.
6. -
7. Fatal Error. Нельзя переопределять константы.
8. Ничего не будет. exit не вызывает сборщик мусора.
9. -
10. string(4) test. Статические и динамические свойства находятся в разных контекстах, потому такое допускается.
11. Есть. global $var эквивалентно $GLOBALS['var']. Но замыкание может быть вызвано в локальном контексте, и global уже не увидит локльных данных, которые нужны замыканию. С use все проще, что надо то и передал. И да, use видит только в том контексте где было вызвано.
12. Не все. Запрещены int, string, double, bool, null, resource, object. Разрешены array и тип объекта.
13. В уровне ошибки. При неудаче include выдаст Warning а require Fatal Error
14. -
15. Хранить сессии на сервере C. Или хранить сессии в БД на сервере D.
16. Нет. Имена переменных и свойств не могут начинаться с цифры.
17. SELECT `id`*2 AS newid WHERE `name`(или value?) IN(A1, A2,..., An);
18. -
19. Модулю доступен массив $_SERVER. Модуль быстрее, чем CGI. Модуль читает конфиг только 1 раз при запуске сервера; CGI, FastCGI при каждом запросе.
20. double (или float, без разницы)
21. Есть. unset удаляет так же ячейку в памяти, в то время как =null присваивает переменной значение null.
22. Fatal Error. Нельзя ничего после закрывающего HEREDOC кроме ;
23. Нет
24. Нет
25. Произайдет зацикливание. Условие цикла будет всегда верно, даже присваивание в цикле не переопределит константу.
26. -
27. 1=>bar
28. Можно сериализовать только объекты и массивы.
29. Ошибка. По идее объект не удалится, но ведь GC не такой тупой?
30. $rLink=mysql_connect(HOST, USER, PASSWORD) || exit('Connection error');
Вот тут выполнение прекратится, так как у || приоритет выше, чем у or. То есть с начало выполнится exit
Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007 Откуда: Berlin
Помог: 707 раз(а)
Обращаю Ваше внимание что в спойлерах основного сообщения скрыты ответы, так что желающие узнать свой результат могут не ждать, к примеру, моего комментария и посчитать количество баллов самостоятельно (0 - неверный ответ, 1 - неполный, 2 - верный). Правда, скорее всего, будет сложно оценить свои знания в случае, если ответ "между неполным и неверным" или "между неполным и верным", но здесь и я могу ошибиться.
Если не ошибаюсь, сейчас лидирует Мелкий - у него 25 баллов из 60 возможных (42%)
----- Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
Мелкий
Отправлено: 14 Января, 2013 - 08:41:52
Активный участник
Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009 Откуда: Россия, Санкт-Петербург
Будет пусто (то есть true). Дело в том, что перегружаемые свойства не могут быть правильно использованы в вызывающем контексте напрямую. Таким образом, например, empty не вызывает перегружающий свойство метод. upd0. Поинтетересовался, всегда ли это так - оказывается, есть только одно исключение - isset. По какой-то причине, с ним все работать будет так, как и ожидается. ("По какой-то" - в смысле, что мне не очень понятны причины, которые порождают его работоспособность в этом случае и невозможность использования функций наподобие empty - одним словом, контекста - в других случаях) Стоило бы добавить в текст тестового кода. upd1. Потестировал isset. Результат отрицательный. Я начинаю забывать английский или же мануал ошибается? upd2. Все же нет. Суть дела - в отсутствующем __isset, который и вызывается в isset и empty. Таким образом, дело состоит в том, что геттер не будет вызываться. К сожалению, в мануале это объяснение не очевидно.
----- Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
Мелкий
Отправлено: 14 Января, 2013 - 09:10:28
Активный участник
Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009 Откуда: Россия, Санкт-Петербург
Верный ответ - true. Происходит это потому, что __get в этом случае не вызывается вовсе: empty сперва вызывает магический метод __isset, только если тот отвечает true, вызывается __get и, в зависимости от полученного значения, empty уже может ответить false.
isset же проверяет только метод __isset, если его нет и свойства такого нет - false. Геттер не вызывает вовсе.
----- PostgreSQL DBA
EuGen
Отправлено: 14 Января, 2013 - 09:18:29
Профессионал
Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007 Откуда: Berlin
Помог: 707 раз(а)
Добавил в оригинальный текст. Правда, пока осознал вызов __isset - и писал это в спойлер теста, Вы уже успели дать пояснение. Впрочем, "хронологию разбора" я сохранил в "upd".
----- Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.