1 | :PROPERTIES:
|
---|
2 | :ID: 6e29e344-2375-49a7-8ca5-234d24a57bc5
|
---|
3 | :END:
|
---|
4 | #+title: PHP
|
---|
5 | * PHP
|
---|
6 | [[https://www.php.net/manual/en/types.comparisons.php][Таблица истинности]]
|
---|
7 |
|
---|
8 | Плюсы PHP:
|
---|
9 | - Проверки типов в рантайме (в отличии от Python)
|
---|
10 | - Заточенность под быструю скорость выполнения (JIT в мастер)
|
---|
11 | - Хорошая документация, доступная в частности на русском языке
|
---|
12 | - var_dump выводит много полезной информации
|
---|
13 | - Есть трационное ООП (почти как в Java)
|
---|
14 | - Есть этап компиляции с оптимизацией
|
---|
15 | - Поддерживается LSP (Liskov Substitute Principle) прямо в языке
|
---|
16 | - Поддерживается в Emacs в какой-то мере
|
---|
17 | - Нормальная поддржка Float'ов. Будет правильно считать 0.1 + 0.2
|
---|
18 | - Копирование значение, а не ссылки. Наличие оператора & для обращения к "ссылке" переменной.
|
---|
19 |
|
---|
20 | ** Полезные библиотеки
|
---|
21 | - https://github.com/sebastiaanluca/php-pipe-operator/
|
---|
22 | - https://github.com/php-toolkit/stdlib
|
---|
23 |
|
---|
24 | ** Сниппеты
|
---|
25 | *** Создание объекта без класса
|
---|
26 | #+begin_src php
|
---|
27 | $object = new stdClass();
|
---|
28 | $object->property = 'I am an object\'s property';
|
---|
29 | #+end_src
|
---|
30 |
|
---|
31 | #+begin_src php
|
---|
32 | #php 7.x
|
---|
33 | $place = ['city' => 'Pokhara', 'country' =>'Nepal'];
|
---|
34 | $obj = (object) $place;
|
---|
35 | #+end_src
|
---|
36 |
|
---|
37 | *** Поддержка LSP
|
---|
38 | #+begin_src php
|
---|
39 | class Base { public function foo(int $a): int { return $a * $a; } }
|
---|
40 |
|
---|
41 | class Extend extends Base { public function foo(): int { return 42; } }
|
---|
42 |
|
---|
43 | # <warning>PHP Warning: Declaration of Extend::foo(): int should be
|
---|
44 | # compatible with Base::foo(int $a): int in /home/w96k/.configeval()'d
|
---|
45 | # code on line 3</warning>
|
---|
46 |
|
---|
47 | #+end_src
|
---|
48 |
|
---|
49 | #+begin_src java
|
---|
50 | class Base {
|
---|
51 | public int foo(int a) {
|
---|
52 | return a * a;
|
---|
53 | }
|
---|
54 | }
|
---|
55 |
|
---|
56 | class Extend extends Base {
|
---|
57 | public int foo() {
|
---|
58 | return 42;
|
---|
59 | }
|
---|
60 | }
|
---|
61 |
|
---|
62 | (new Extend()).foo(); # => 42
|
---|
63 |
|
---|
64 | # works just fine with violating Liskov Substitute Principle
|
---|
65 | #+end_src
|
---|
66 |
|
---|
67 |
|
---|
68 | Минусы PHP:
|
---|
69 | - Страшный синтаксис, смесь Perl, Bash и Java
|
---|
70 | - Мало реализаций
|
---|
71 | - Стандарт появился совсем недавно (в 2016м году)
|
---|
72 | - Множество скрытых ошибок (об этом ниже)
|
---|
73 | - ЫНТЫРПРАЙЗ (курсы, вебинары, подкасты, спонсоры, сертификации и другой
|
---|
74 | развод на доллары) повсюду АКА создан жидами
|
---|
75 | - Платный тулинг (PHPstorm, платный LSP-сервер)
|
---|
76 | - Непонятные ошибки
|
---|
77 | - Нельзя инициализировать экземпляры класса в определении класса (public $tear = new Tear())
|
---|
78 | - Хоть в языке и наяривают на ООП стандартная библиотека максимально процедурна
|
---|
79 | - Есть goto
|
---|
80 | - Странно работает тернарный оператор
|
---|
81 | - Подстановка переменных как в bash ($test = 'meow' $$test = 'the name of var is meow')
|
---|
82 | - ~True == 1 и False == 0~ при нестрогом сравнении (в питоне также)
|
---|
83 | - Нет docstring
|
---|
84 | - В версиях до 8.0 нет аннотаций
|
---|
85 | - Библиотеки реализуют то, что должно быть в стандартной библиотеки (класс String и т.д.)
|
---|
86 | - Нет Pipe оператора
|
---|
87 | - Нет макросов
|
---|
88 | - Нет способа создавать объект без класса (синглтон)
|
---|
89 | - Страшные массивы-хеши, какая-то муть с типами данных
|
---|
90 | - Нет проверки типов в compile-time
|
---|
91 | - Слабая типизация
|
---|
92 |
|
---|
93 |
|
---|
94 | Если зайти в repl ~php -a~ и нажать таб, то предложит 4618 дополнений,
|
---|
95 | что невероятно много.
|
---|
96 |
|
---|
97 | Ссылки на критику:
|
---|
98 | - https://tnx.nl/php.html
|
---|
99 |
|
---|
100 | [[http://phptherightway.ru][PHP: Правильный путь]]
|
---|
101 | [[https://docstore.mik.ua/orelly/webprog/php/index.htm][Programming PHP]]
|
---|
102 |
|
---|
103 | *Фреймворки*:
|
---|
104 | - [[id:71d88c28-b79f-47cc-b5ec-7439fcff5f7f][Symfony]]
|
---|
105 |
|
---|
106 | *Видео*:
|
---|
107 | - [[https://youtube.com/watch?v=joL__9t6E_s][Nikita Popov - PHP Language Trivia]]
|
---|
108 | - [[https://youtube.com/watch?v=JBWgvUrb-q8][Nikita Popov – PHP Performance Trivia]]
|
---|
109 |
|
---|
110 | *Статьи:*
|
---|
111 | - http://blogerator.org/page/php-7-kritikujte-dalshe-a-my-budem-rabotat-stogov
|
---|
112 | - http://blogerator.org/page/2012-php-core-team-intervju-zmievskij-malyshev-alshanetskij-eksperty-sravnenie
|
---|
113 |
|
---|
114 | *Книги*:
|
---|
115 | - [[https://www.amazon.com/dp/067232704X][Extending and Embedding PHP]]
|
---|
116 |
|
---|
117 | ** Окружение
|
---|
118 | *** Дебаггер
|
---|
119 | https://emacs-lsp.github.io/lsp-mode/tutorials/php-guide/
|
---|