Собеседование PHP SQL Laravel

Lecture



1. Что выведет ? почему приведение типов именно к целому а не наоборот?

 

$a = "test";

if ($a == 0) {

    echo "1";

} else {

    echo "2";

}

var_dump('123' == '       123'); // true

var_dump('1e3' == '1000'); // true

var_dump('+74951112233' == '74951112233'); // true

var_dump('00000020' == '0000000000000000020'); // true

var_dump('0X1D' == '29E0'); // true

var_dump('0xafebac' == '11529132'); // true

var_dump('0xafebac' == '0XAFEBAC'); // true

var_dump('0xeb' == '+235e-0'); // true

var_dump('0.235' == '+.235'); // true

var_dump('0.2e-10' == '2.0E-11'); // true

var_dump('61529519452809720693702583126814' == '61529519452809720000000000000000'); // true в php < 5.4.

 

В случае, если вы сравниваете число со строкой или две строки, содержащие числа, каждая строка будет преобразована в число, и сравниваться они будут как числа. Эти правила также распространяются на оператор switch. Преобразование типов не происходит при использовании === или !== так как в этом случае кроме самих значений сравниваются еще и типы.

Преобразование строк в числа 

Если строка распознается как числовое значение, результирующее значение и тип определяется так, как показано далее.

Если строка не содержит какой-либо из символов '.', 'e', или 'E', и значение числа помещается в пределы целых чисел (определенных PHP_INT_MAX), строка будет распознана как целое число (integer). Во всех остальных случаях она считается числом с плавающей точкой (float).

Значение определяется по начальной части строки. Если строка начинается с верного числового значения, будет использовано это значение. Иначе значением будет 0 (ноль). Верное числовое значение - это одна или более цифр (могущих содержать десятичную точку), по желанию предваренных знаком, с последующим необязательным показателем степени. Показатель степени - это 'e' или 'E' с последующими одной или более цифрами.

 

Сравнение типов $x и результатов функций PHP, связанных с типами
Выражение gettype() empty() is_null() isset() boolean : if($x)
$x = ""; string TRUE FALSE TRUE FALSE
$x = null; NULL TRUE TRUE FALSE FALSE
var $x; NULL TRUE TRUE FALSE FALSE
$x не определена NULL TRUE TRUE FALSE FALSE
$x = array(); array TRUE FALSE TRUE FALSE
$x = array('a', 'b'); array FALSE FALSE TRUE TRUE
$x = false; boolean TRUE FALSE TRUE FALSE
$x = true; boolean FALSE FALSE TRUE TRUE
$x = 1; integer FALSE FALSE TRUE TRUE
$x = 42; integer FALSE FALSE TRUE TRUE
$x = 0; integer TRUE FALSE TRUE FALSE
$x = -1; integer FALSE FALSE TRUE TRUE
$x = "1"; string FALSE FALSE TRUE TRUE
$x = "0"; string TRUE FALSE TRUE FALSE
$x = "-1"; string FALSE FALSE TRUE TRUE
$x = "php"; string FALSE FALSE TRUE TRUE
$x = "true"; string FALSE FALSE TRUE TRUE
$x = "false"; string FALSE FALSE TRUE TRUE

 

Гибкое сравнение с помощью ==
  TRUE FALSE 1 0 -1 "1" "0" "-1" NULL array() "php" ""
TRUE TRUE FALSE TRUE FALSE TRUE TRUE FALSE TRUE FALSE FALSE TRUE FALSE
FALSE FALSE TRUE FALSE TRUE FALSE FALSE TRUE FALSE TRUE TRUE FALSE TRUE
1 TRUE FALSE TRUE FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE
0 FALSE TRUE FALSE TRUE FALSE FALSE TRUE FALSE TRUE FALSE TRUE TRUE
-1 TRUE FALSE FALSE FALSE TRUE FALSE FALSE TRUE FALSE FALSE FALSE FALSE
"1" TRUE FALSE TRUE FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE
"0" FALSE TRUE FALSE TRUE FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE
"-1" TRUE FALSE FALSE FALSE TRUE FALSE FALSE TRUE FALSE FALSE FALSE FALSE
NULL FALSE TRUE FALSE TRUE FALSE FALSE FALSE FALSE TRUE TRUE FALSE TRUE
array() FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE TRUE TRUE FALSE FALSE
"php" TRUE FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE TRUE FALSE
"" FALSE TRUE FALSE TRUE FALSE FALSE FALSE FALSE TRUE FALSE FALSE TRUE

 

Жесткое сравнение с помощью ===
  TRUE FALSE 1 0 -1 "1" "0" "-1" NULL array() "php" ""
TRUE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
1 FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
0 FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
-1 FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
"1" FALSE FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE
"0" FALSE FALSE FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE
"-1" FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE
NULL FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE
array() FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE FALSE FALSE
"php" FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE FALSE
"" FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE

 

2.1 Что выведет ?

 

 

 class Foo { 

?>

     

        function bar() { 

            print "bar"; 

        } 

    } 

    $foo = new Foo();

    $foo->bar();

 

выведет ошибку

 

Parse error: syntax error, unexpected '?>', expecting function (T_FUNCTION) or const (T_CONST) in /home//prog.php on line 4

 

2.2 а почему так не будет ошибки тут?

 

 class Foo { 

        function bar() { 

?>     

            print "bar"; 

        } 

    } 

    $foo = new Foo();

    $foo->bar();

3. Что выведет ?

 

 

class MyException extends Exception {}

class MegaException extends MyException {}

 

try {

throw new MyException();

} catch (MyException $e) {

//Shit happens

throw new MegaException();

} catch (MegaException $e) {

echo 'aaa';

} catch (Exception $e) {

echo 'bbb';

}

echo 'ccc';

 

ответ - выведет ошбику т к  throw new MegaException(); находится за пределами трай кеш

 

Fatal error: Uncaught MegaException in /home/prog.php:10

Stack trace:

#0 {main}

  thrown in /home//prog.php on line 10

 

нужно убрать throw new MegaException

 

class MyException extends Exception {};

class MegaException extends MyException {};

 

try {

throw new MegaException();

} catch (MegaException $e) {

echo 'aaa';

} catch (MyException $e) {

//Shit happens

throw new MegaException();

} catch (Exception $e) {

echo 'bbb';

}

echo 'ccc';

 

 

4.как изменить чтобы вывело 

  aaa  

  bbb 

  ccc 

 

5. что выведет? 

 

 

function a(&$bar)

{

$bar *= 2;

return $bar;

}

$x =3;

$y = a($x);

$x = 5;

echo $x.' '.$y;

 

ответ  "6 5 "

 

6. Что нужно изменить что бы   вывело "5  5"

(изменяя (дополняя) только ссылки)

 

 

вариант решения 6.1

 

function &a(&$bar)

{

$bar *= 2;

return $bar;

}

 

$x =3;

$y = &a($x);

$x = 5;

 

echo $x.' '.$y;

$x = 5;

 

echo $x.' '.$y;

 

 

вариант решения 6.2

 

function a(&$bar)

{

$bar *= 2;

return $bar;

}

 

$x =3;

$y = a($x);

 $y = &$x;

$x = 5;

 

echo $x.' '.$y;

 

 

6.7 что выведет код

 $a = '1';

$b = &$a;

$b = "2$b";

echo $a.", ".$b; и

 6.8 что выведет код

 

$i = 016;

echo $i / 2;

7.написать код который найдет неповторяющийся элемент ммассива (5)

 

 

$a = [3, 4, 7, 1, 2, 5, 7, 4, 3, 1, 2];

 $b = [];

 

foreach($a as $k1=>$v1)

{

    foreach($a as $k=> $v)

    {

       if( $v1=== $v && $k1 != $k   )      

         $b[$v]=1;

    }

    

}

 

 foreach($a as $k=> $vb)

    { 

     if (!isset($b[$vb])) echo $vb;

    }

    

 

 

 

 

8. есть 2 таблицы 

табл authors 

 id

 

 

табл articles

 id

 author_id

 

8.1 нужно вывести авторы сколько у каждого статей

8.2 нужно вывести авторов у которых более 3х статей

 

решение

SELECT au.id, COUNT(ar.id) cnt

FROM authors  au

LEFT JOIN articles ar ON  ar.author_id= au.id

GROUP BY au.id

HAVING cnt>=4

 

 

9 чем отличается интерфейс от абстрактного класса?

Ответ

Абстрактный(Abstract) класс - класс, который имеет хотя б 1 абстрактный (не определенный) метод; обозначается как abstract.

Интерфейс - такой же абстрактный класс,только в нем не может быть свойств и не определены тела у методов.

Так же стоит заметить, что абстрактный класс наследуется(etxends), а интерфейс реализуется (implements). Вот и возникает разница между ними, что наследовать мы можем только 1 класс, а реализовать сколько угодно.
ВАЖНО! При реализации интерфейса, необходимо реализовать все его методы, иначе будет Fatal error, так же это можно избежать, присвоив слово abstract.
Пример:


interface I {
    public function F();
    public function say();
}

abstract class A implements I {
    function say() {
        echo 'Hello';
    }
    // function F() - не реализована
}

10 какие уровни приватности для методов в PHP , расскажите про них.

Ответ

Одна из трех основных концепций ООП — наследование (другие две: инкапсуляция и полиморфизм). Вобщем-то именно для нее и были реализованы права доступов. Основанная идея наследования: Дочерний объект, при наследовании (extend) родителя перенимает себе все родительские методы и свойства, а так же может обзавестись своими собственными. Понимая эту базу, можно перейти в всему что находится ниже… 

Private — объявляет метод или свойство доступным только в том классе в котором он присутствует. Тоесть к private методам и свойствам мы не можем обращаться ни из объектов, ни из дочерних классов.

Protected — объявляет метод или свойство защищенными. Тоесть такими, которые не могут быть доступны из объекта, реализующего класс, но вполне может быть использовано в дочерних классах.

Public — публичный. Классы и методы, объявленные public, могут быть доступны как внутри самого класса, так и в дочерних классах и в объектах, реализовавших класс.

Сразу хочу заметить, что при наследовании, методы доступа изменяться могут только к более лояльным. тоесть в следующей последовательности, но не обратно: private → protected → public

Так же методы могут быть final тоесть такими, которые невозможно переопределить в классах потомках.

 

11 ларавел php artisan  что делает какие команды чаще всего через нее запускаете?

Artisan - название интерфейса командной строки, входящей в состав Laravel

php artisan list

ВЫЗОВ КОМАНД для приложения

12. какие мидлевере вы испольовали что это?

HTTP Middleware (посредники) - это фильтры обработки HTTP-запроса. Так, например, в Laravel включены middlewares для проверки аутентификации пользователя. 

В Laravel есть несколько дефолтных middleware, которые находятся в папке app/Http/Middleware. Это middlewares для реализации режима обслуживания сайта ("сайт временно не работает, зайдите позже"), проверки авторизации, CSRF-защиты и т.п.

13. что это SERVICE CONTAINER?

Service Container (сервис-контейнер, ранее IoC-контейнер) - это мощное средство для управлением зависимостями классов.

 

 

Service Container (сервис-контейнер, ранее IoC-контейнер) - это мощное средство для управлением зависимостями классов. В современном мире веб-разработки есть такой модный термин - Dependency Injection, «внедрение зависимостей», он означает внедрение неких классов в создаваемый класс через конструктор или метод-сеттер. Создаваемый класс использует эти классы в своей работе. Сервис-контейнер реализует как раз этот функционал.

 

Несколько упрощая, можно сказать так: когда фреймворку нужно создать класс, он применяет не конструкцию new SomeClass(new SomeService()), а App::make('SomeClass'), предварительно зарегистрировав функцию, которая создает класс SomeClass и все классы, которые SomeClass принимает в качестве аргументов конструктора

 

13.1 Регистрация обычного класса

$this->app->bind('FooBar', function($app)

{    return new FooBar($app['SomethingElse']);

});

Регистрация класса-синглтона

 

 

$this->app->singleton('FooBar', function($app)

{    return new FooBar($app['SomethingElse']);

});

 

 

 

13.2 Получение из контейнера

Есть несколько способов получить (resolve) содержимое контейнера.

13.2.1  Во-первых, вы можете использовать метод make():

$fooBar = $this->app->make('FooBar');

13.2.2  Во-вторых, вы можете обратиться к контейнеру как к массиву:

$fooBar = $this->app['FooBar'];

13.2.3  И, наконец, в-третьих (и в главных) вы можете явно указать тип аргумента в конструкторе класса и фреймворк сам возьмёт его из контейнера (в примере ниже это UserRepository):

 public function __construct(UserRepository $users)

    {

        $this->users = $users;

    }

 


Comments


To leave a comment
If you have any suggestion, idea, thanks or comment, feel free to write. We really value feedback and are glad to hear your opinion.
To reply

Running server side scripts using PHP as an example (LAMP)

Terms: Running server side scripts using PHP as an example (LAMP)