Lecture
$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' с последующими одной или более цифрами.
| Выражение | 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 |
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();
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;
$b = &$a;
$b = "2$b";
echo $a.", ".$b; и
$i = 016;
echo $i / 2;
$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;
}
табл authors
id
табл articles
id
author_id
решение
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() - не реализована
}
Ответ
Одна из трех основных концепций ООП — наследование (другие две: инкапсуляция и полиморфизм). Вобщем-то именно для нее и были реализованы права доступов. Основанная идея наследования: Дочерний объект, при наследовании (extend) родителя перенимает себе все родительские методы и свойства, а так же может обзавестись своими собственными. Понимая эту базу, можно перейти в всему что находится ниже…
Private — объявляет метод или свойство доступным только в том классе в котором он присутствует. Тоесть к private методам и свойствам мы не можем обращаться ни из объектов, ни из дочерних классов.
Protected — объявляет метод или свойство защищенными. Тоесть такими, которые не могут быть доступны из объекта, реализующего класс, но вполне может быть использовано в дочерних классах.
Public — публичный. Классы и методы, объявленные public, могут быть доступны как внутри самого класса, так и в дочерних классах и в объектах, реализовавших класс.
Сразу хочу заметить, что при наследовании, методы доступа изменяться могут только к более лояльным. тоесть в следующей последовательности, но не обратно: private → protected → public
Так же методы могут быть final тоесть такими, которые невозможно переопределить в классах потомках.
Artisan - название интерфейса командной строки, входящей в состав Laravel
php artisan list
HTTP Middleware (посредники) - это фильтры обработки HTTP-запроса. Так, например, в Laravel включены middlewares для проверки аутентификации пользователя.
В Laravel есть несколько дефолтных middleware, которые находятся в папке app/Http/Middleware. Это middlewares для реализации режима обслуживания сайта ("сайт временно не работает, зайдите позже"), проверки авторизации, CSRF-защиты и т.п.
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
Running server side scripts using PHP as an example (LAMP)
Terms: Running server side scripts using PHP as an example (LAMP)