source: at-w96k/content/digarden/20210423140526-php.org@ 1f54a10

Last change on this file since 1f54a10 was 1f54a10, checked in by w96k <w96k@…>, on Dec 1, 2022 at 8:00:02 PM

Digigarden: add php con

  • Property mode set to 100644
File size: 7.1 KB
Line 
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** Минусы PHP:
21- Глобальная конфигурация, которая влияет на поведение
22- Расширения, которые влияют на поведение
23- Нельзя изменять встроенные функции
24- Сообщество обожает ООП, но в стандартной библиотеке только процедуры
25- Стандартная библиотека не разбита на неймспейсы, доступно сразу около
26 5-6 тыся функций
27- Странный нейминг
28- Можно в функцию без аргументов прокинуть сколько угодно аргументов без
29 ошибки. Все остальные языки кроме Си этого не позволяют сделать (даже
30 C++).
31- Сложно переопределять поведение библиотек. Есть рефлексия, но скажем,
32 чтобы поменять что-то в vendor через рефлексию возникнут сложности. В
33 языках вроде ruby и python есть конфигурация на этом же языке
34 программирования, где можно проводить разные манипуляции. В PHP нету
35 конфигурации на PHP, чтобы делать что-то до запуска программы.
36- Нельзя указать тип присваевоемой переменной, что ведёт к потенциальным
37 ошибкам. Например мы можем в рантайме поменять переменную на другой
38 тип и IDE ничего не подскажет, а ошибка случится только во времени
39 исполнения, а не компиляции. С хорошим выводов типов, этого бы не было
40 (SML, Ocaml).
41
42** Полезные библиотеки
43- https://github.com/sebastiaanluca/php-pipe-operator/
44- https://github.com/php-toolkit/stdlib
45
46** Сниппеты
47*** Создание объекта без класса
48#+begin_src php
49 $object = new stdClass();
50 $object->property = 'I am an object\'s property';
51#+end_src
52
53#+begin_src php
54 #php 7.x
55 $place = ['city' => 'Pokhara', 'country' =>'Nepal'];
56 $obj = (object) $place;
57#+end_src
58
59*** Поддержка LSP
60#+begin_src php
61 class Base { public function foo(int $a): int { return $a * $a; } }
62
63 class Extend extends Base { public function foo(): int { return 42; } }
64
65 # <warning>PHP Warning: Declaration of Extend::foo(): int should be
66 # compatible with Base::foo(int $a): int in /home/w96k/.configeval()'d
67 # code on line 3</warning>
68
69#+end_src
70
71#+begin_src java
72 class Base {
73 public int foo(int a) {
74 return a * a;
75 }
76 }
77
78 class Extend extends Base {
79 public int foo() {
80 return 42;
81 }
82 }
83
84 (new Extend()).foo(); # => 42
85
86 # works just fine with violating Liskov Substitute Principle
87#+end_src
88
89
90** Минусы PHP:
91- Страшный синтаксис, смесь Perl, Bash и Java
92- Мало реализаций
93- Стандарт появился совсем недавно (в 2016м году)
94- Множество скрытых ошибок (об этом ниже)
95- ЫНТЫРПРАЙЗ (курсы, вебинары, подкасты, спонсоры, сертификации и другой
96 развод на доллары) повсюду АКА создан жидами
97- Платный тулинг (PHPstorm, платный LSP-сервер)
98- Непонятные ошибки
99- Нельзя инициализировать экземпляры класса в определении класса (public $tear = new Tear())
100- Хоть в языке и наяривают на ООП стандартная библиотека максимально процедурна
101- Есть goto
102- Странно работает тернарный оператор
103- Подстановка переменных как в bash ($test = 'meow' $$test = 'the name of var is meow')
104- ~True == 1 и False == 0~ при нестрогом сравнении (в питоне также)
105- Нет docstring
106- В версиях до 8.0 нет аннотаций
107- Библиотеки реализуют то, что должно быть в стандартной библиотеки (класс String и т.д.)
108- Нет Pipe оператора
109- Нет макросов
110- Нет способа создавать объект без класса (синглтон)
111- Страшные массивы-хеши, какая-то муть с типами данных
112- Нет проверки типов в compile-time
113- Слабая типизация
114
115
116 Если зайти в repl ~php -a~ и нажать таб, то предложит 4618 дополнений,
117 что невероятно много.
118
119Ссылки на критику:
120- https://tnx.nl/php.html
121
122[[http://phptherightway.ru][PHP: Правильный путь]]
123[[https://docstore.mik.ua/orelly/webprog/php/index.htm][Programming PHP]]
124
125*Фреймворки*:
126- [[id:71d88c28-b79f-47cc-b5ec-7439fcff5f7f][Symfony]]
127
128*Видео*:
129- [[https://youtube.com/watch?v=joL__9t6E_s][Nikita Popov - PHP Language Trivia]]
130- [[https://youtube.com/watch?v=JBWgvUrb-q8][Nikita Popov – PHP Performance Trivia]]
131- [[https://www.youtube.com/playlist?list=PLr3d3QYzkw2xabQRUpcZ_IBk9W50M9pe-][Learn PHP The Right Way - Full PHP Tutorial]]
132
133*Статьи:*
134- http://blogerator.org/page/php-7-kritikujte-dalshe-a-my-budem-rabotat-stogov
135- http://blogerator.org/page/2012-php-core-team-intervju-zmievskij-malyshev-alshanetskij-eksperty-sravnenie
136- [[https://habr.com/ru/company/skyeng/blog/666626/][Как прокачаться в PHP: 70 ресурсов]]
137
138*Книги*:
139- [[https://www.amazon.com/dp/067232704X][Extending and Embedding PHP]]
140
141** Окружение
142*** Дебаггер
143https://emacs-lsp.github.io/lsp-mode/tutorials/php-guide/
Note: See TracBrowser for help on using the repository browser.