суббота, 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 это поведение поменяется.


Как узнать какие задачи/ветки еще не залиты в мастер или релиз

git branch --no-merged [имя ветки] - выдаст список не влитых в указанную в команде ветку.

четверг, 13 августа 2015 г.

Раздача доступов в постгрес

Защищено всё - схемы, базы, последовательности, таблицы и т.д.

Можно нагуглить запросы с селектами которые всем дадут доступ.

Я напишу лишь запросы, которые мне помогли дать доступы на известные мне данные:

GRANT ALL ON ALL SEQUENCES IN SCHEMA log, public, auth TO "user-database";
GRANT ALL ON ALL TABLES IN SCHEMA log, public, auth TO "user-database";
GRANT ALL ON DATABASE db TO "user-name";
ALTER USER myuser WITH SUPERUSER;


Разом дать все общие доступы не получилось - всё индивидуально.

Есть также "дефолтные доступы". Можно их поменять, чтобы для новых таблиц уже были автоматом новые права.

Текущие права можно в консоле изнать с помощью
\dp

понедельник, 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 (?) запретили по дефолту, но вопросы по ним остаются. Ни разу в работе не использовал такой приём.

пятница, 9 января 2015 г.

DOM через Javascript

Добавляем элемент функцией

function showMessage(message) {
    var e = document.createElement("div");
    e.textContent = message;
    return document.body.appendChild(e);
}
let messageDiv = showMessage("Loading");

Удаляем

document.body.removeChild(messageDiv);