diff options
Diffstat (limited to 'content/digarden/pages/20210423140526-php.org')
-rw-r--r-- | content/digarden/pages/20210423140526-php.org | 171 |
1 files changed, 0 insertions, 171 deletions
diff --git a/content/digarden/pages/20210423140526-php.org b/content/digarden/pages/20210423140526-php.org deleted file mode 100644 index fcb0075..0000000 --- a/content/digarden/pages/20210423140526-php.org +++ /dev/null @@ -1,171 +0,0 @@ -:PROPERTIES: -:ID: 6e29e344-2375-49a7-8ca5-234d24a57bc5 -:END: -#+title: PHP - -* PHP -[[https://www.php.net/manual/en/types.comparisons.php][Таблица истинности]] -** Плюсы PHP: -- Проверки типов в рантайме (в отличии от Python) -- Заточенность под быструю скорость выполнения (JIT в мастер) -- Хорошая документация, доступная в частности на русском языке -- var_dump выводит много полезной информации -- Есть трационное ООП (почти как в Java) -- Есть этап компиляции с оптимизацией -- Поддерживается LSP (Liskov Substitute Principle) прямо в языке -- Поддерживается в Emacs в какой-то мере -- Нормальная поддржка Float'ов. Будет правильно считать 0.1 + 0.2 -- Копирование значение, а не ссылки. Наличие оператора & для обращения к "ссылке" переменной. -** Минусы PHP: -- Нельзя инициализировать значения поля в классе. Это ведёт к мусору - вроде $this->param = new ArrayCollection(); -- Глобальная конфигурация, которая влияет на поведение -- Неочевидное поведение -#+begin_src PHP - !($a instanceof stdClass) - - # is equals to not clear - - !$class instanceof someClass -#+end_src - -- Расширения, которые влияют на поведение -- Нельзя изменять встроенные функции -- Сообщество обожает ООП, но в стандартной библиотеке только процедуры -- Стандартная библиотека не разбита на неймспейсы, доступно сразу около - 5-6 тыся функций -- Странный нейминг -- Можно в функцию без аргументов прокинуть сколько угодно аргументов без - ошибки. Все остальные языки кроме Си этого не позволяют сделать (даже - C++). -- Сложно переопределять поведение библиотек. Есть рефлексия, но скажем, - чтобы поменять что-то в vendor через рефлексию возникнут сложности. В - языках вроде ruby и python есть конфигурация на этом же языке - программирования, где можно проводить разные манипуляции. В PHP нету - конфигурации на PHP, чтобы делать что-то до запуска программы. -- Нельзя указать тип присваевоемой переменной, что ведёт к потенциальным - ошибкам. Например мы можем в рантайме поменять переменную на другой - тип и IDE ничего не подскажет, а ошибка случится только во времени - исполнения, а не компиляции. С хорошим выводов типов, этого бы не было - (SML, Ocaml). - -#+begin_src php -<?php - declare(strict_types=1); - - $test = "string"; - - function test_func(string $var, callable $func): string - { - $func(); - return $var; - } - - var_dump(test_func($test, function() use (&$test) { - $test = 42; - })); - - var_dump($test); - - var_dump(test_func($test)); -#+end_src -** Полезные библиотеки -- https://github.com/sebastiaanluca/php-pipe-operator/ -- https://github.com/php-toolkit/stdlib -** Сниппеты -*** Создание объекта без класса -#+begin_src php - $object = new stdClass(); - $object->property = 'I am an object\'s property'; -#+end_src - -#+begin_src php - #php 7.x - $place = ['city' => 'Pokhara', 'country' =>'Nepal']; - $obj = (object) $place; -#+end_src -*** Поддержка LSP -#+begin_src php - class Base { public function foo(int $a): int { return $a * $a; } } - - class Extend extends Base { public function foo(): int { return 42; } } - - # <warning>PHP Warning: Declaration of Extend::foo(): int should be - # compatible with Base::foo(int $a): int in /home/w96k/.configeval()'d - # code on line 3</warning> - -#+end_src - -#+begin_src java - class Base { - public int foo(int a) { - return a * a; - } - } - - class Extend extends Base { - public int foo() { - return 42; - } - } - - (new Extend()).foo(); # => 42 - - # works just fine with violating Liskov Substitute Principle -#+end_src -** Минусы PHP: -- Страшный синтаксис, смесь Perl, Bash и Java -- Мало реализаций -- Стандарт появился совсем недавно (в 2016м году) -- Множество скрытых ошибок (об этом ниже) -- ЫНТЫРПРАЙЗ (курсы, вебинары, подкасты, спонсоры, сертификации и другой - развод на доллары) повсюду АКА создан жидами -- Платный тулинг (PHPstorm, платный LSP-сервер) -- Непонятные ошибки -- Нельзя инициализировать экземпляры класса в определении класса (public $tear = new Tear()) -- Хоть в языке и наяривают на ООП стандартная библиотека максимально процедурна -- Есть goto -- Странно работает тернарный оператор -- Подстановка переменных как в bash ($test = 'meow' $$test = 'the name of var is meow') -- ~True == 1 и False == 0~ при нестрогом сравнении (в питоне также) -- Нет docstring -- В версиях до 8.0 нет аннотаций -- Библиотеки реализуют то, что должно быть в стандартной библиотеки (класс String и т.д.) -- Нет Pipe оператора -- Нет макросов -- Нет способа создавать объект без класса (синглтон) -- Страшные массивы-хеши, какая-то муть с типами данных -- Нет проверки типов в compile-time -- Слабая типизация - - - Если зайти в repl ~php -a~ и нажать таб, то предложит 4618 дополнений, - что невероятно много. - -Ссылки на критику: -- https://tnx.nl/php.html - -[[http://phptherightway.ru][PHP: Правильный путь]] -[[https://docstore.mik.ua/orelly/webprog/php/index.htm][Programming PHP]] - -*Фреймворки*: -- [[id:71d88c28-b79f-47cc-b5ec-7439fcff5f7f][Symfony]] - -*Видео*: -- [[https://youtube.com/watch?v=joL__9t6E_s][Nikita Popov - PHP Language Trivia]] -- [[https://youtube.com/watch?v=JBWgvUrb-q8][Nikita Popov – PHP Performance Trivia]] -- [[https://www.youtube.com/playlist?list=PLr3d3QYzkw2xabQRUpcZ_IBk9W50M9pe-][Learn PHP The Right Way - Full PHP Tutorial]] - -*Статьи:* -- http://blogerator.org/page/php-7-kritikujte-dalshe-a-my-budem-rabotat-stogov -- http://blogerator.org/page/2012-php-core-team-intervju-zmievskij-malyshev-alshanetskij-eksperty-sravnenie -- [[https://habr.com/ru/company/skyeng/blog/666626/][Как прокачаться в PHP: 70 ресурсов]] - -*Блоги:* -- https://tomasvotruba.com/blog - -*Книги*: -- [[https://www.amazon.com/dp/067232704X][Extending and Embedding PHP]] -** Окружение -*** Дебаггер -https://emacs-lsp.github.io/lsp-mode/tutorials/php-guide/
\ No newline at end of file |