summaryrefslogtreecommitdiff
path: root/content/digarden/pages/20210423140526-php.org
diff options
context:
space:
mode:
Diffstat (limited to 'content/digarden/pages/20210423140526-php.org')
-rw-r--r--content/digarden/pages/20210423140526-php.org171
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