суббота, 24 октября 2015 г.

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

Продолжаем разбор интересных задач. Часть 1 http://ph4n70m.blogspot.ru/2015/03/php.html

Какая функция лучше всего подойдет для удаления тегов из строки?

* strip_tags()
* str_replace()
* preg_replace()
* strip_markup()

Насколько я понимаю - strip_tags - для вырезания тегов. Strip_markup - это из какого-то расширения для вырезания тегов разметки


Какая разница между доступом к методу класса через -> и ::?

* -> для статичных, :: - для нестатичных
* -> для нестатичных, :: - для статичных
* -> для статичных, :: - для всех методов
* -> для всех методов, :: - для статичных
* без разницы

Пока так, прочее надо проверить. Ранее можно было их даже заменять - php ругался на то что идёт вызов к статичному методу, но работал.

Зачем heredoc используется в PHP?

* Позволяет создавать строку с цитированием
* Позволяет создавать множество строк  с цитированием
* Позволяет создавать строку без цитирования
* Позволяет создавать множество строк без цитирования

Heredoc (<<<EOD) - это объявление строки, с заменой переменных. Для отмены замены можно использовать nowdoc синтаксис (<<<'EOD')

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

<?php
  $number = [0.57, '21.5', 40.52];
  if (in_array(21.5, $number, true)) echo "21.5 is found!";

  else   echo "21.5 is not found";

* Найдено
* Не найдено
* Ничего. Скрипт не корректный

Не найдет, потому что третий параметр указывает на то, что при сравнении надо учитывать тип переменных.

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

abstract class Foo {
  abstract function bar(array $params = NULL);
}

class Moo extends Foo {
  public function bar(array $params) {
    echo count($params);
  }
}

$c = new Moo();
$c->bar(array(5));

* 1
* 0
* 5
* Fatal error

Будет ошибка, т.к. объявления функций не совпадают

Какие утверждения про абстрактный класс верны?

* Методы, объвленные как абстрактные не могут включать функционал
* Нельзя создать объект такого класса
* Абстрактные методы, содержащие функционал, нельзя переопределить
* Когда объявлем абстрактный класс - надо создать от него объект

Как исправить код в вызове echo?

<?php
  $arr['one'] = 14;
  echo "Event happend $arr['one'] days ago";

* $arr[one]
* {$arr['one']}
* $arr{one}
* " . $arr['one'] . "

Или в скобкам или как конкатенация строк. Подробно http://php.net/manual/en/language.types.string.php#language.types.string.parsing

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

<?php
  $str = 123;
  echo "Value of variable - \$str";

* Value of variable - \$str
* Value of variable - 123
* Value of variable - $str
Двойные кавычки и искейпим знак доллара - выводим как символ.

Как вывести строку "Hello, World!"?
<?php
  function myfunction() {
    ?????

    print $string;
  }

  myfunction("Hello, World!");

* list($string) = func_get_args();
* $string = $argv[1];
* $string = get_function_args();
* Никак
Т.к. это всё же скриптовый язык, то многие вещи можно получить в рантайме. $argv в то же время используется для чтения аргументов из командной строки. А функции get_function_args - в php нету.

Сколько параметров может принять эта функция?

<?php
    function get_sum() {
    }
* 1
* 0
* сколько угодно
Как и в предыдущей задаче - передавать можно что угодно и сколько угодно. Возможно в php7 strict mode это поведение поменяется.


Комментариев нет:

Отправить комментарий