Table of Contents

PHP

Плюсы PHP:

  • Проверки типов в рантайме (в отличии от Python)
  • Заточенность под быструю скорость выполнения (JIT в мастер)
  • Хорошая документация, доступная в частности на русском языке
  • var_dump выводит много полезной информации
  • Есть трационное ООП (почти как в Java)
  • Есть этап компиляции с оптимизацией
  • Поддерживается LSP (Liskov Substitute Principle) прямо в языке
  • Поддерживается в Emacs в какой-то мере
  • Нормальная поддржка Float'ов. Будет правильно считать 0.1 + 0.2
  • Копирование значение, а не ссылки. Наличие оператора & для обращения к "ссылке" переменной.

Минусы PHP:

  • Глобальная конфигурация, которая влияет на поведение
  • Расширения, которые влияют на поведение
  • Нельзя изменять встроенные функции
  • Сообщество обожает ООП, но в стандартной библиотеке только процедуры
  • Стандартная библиотека не разбита на неймспейсы, доступно сразу около 5-6 тыся функций
  • Странный нейминг
  • Можно в функцию без аргументов прокинуть сколько угодно аргументов без ошибки. Все остальные языки кроме Си этого не позволяют сделать (даже C++).
  • Сложно переопределять поведение библиотек. Есть рефлексия, но скажем, чтобы поменять что-то в vendor через рефлексию возникнут сложности. В языках вроде ruby и python есть конфигурация на этом же языке программирования, где можно проводить разные манипуляции. В PHP нету конфигурации на PHP, чтобы делать что-то до запуска программы.

Сниппеты

Создание объекта без класса

$object = new stdClass();
$object->property = 'I am an object\'s property';
#php 7.x
$place = ['city' => 'Pokhara', 'country' =>'Nepal'];
$obj = (object) $place;

Поддержка LSP

 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>

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

Минусы 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 дополнений, что невероятно много.

Ссылки на критику:

PHP: Правильный путь Programming PHP

Фреймворки:

Видео:

Статьи:

Книги:

Окружение

w96k Ⓐ 2019-2022

2022-11-14 Mon 13:38