source: content/digarden/20210423140526-php.org@ 5a2b670

Last change on this file since 5a2b670 was 5a2b670, checked in by Mikhail Kirillov <w96k@…>, on Oct 6, 2022 at 12:37:40 PM

Add digital garden

  • Property mode set to 100644
File size: 4.9 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** Полезные библиотеки
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*** Дебаггер
119https://emacs-lsp.github.io/lsp-mode/tutorials/php-guide/
Note: See TracBrowser for help on using the repository browser.