Динамическая типизация в PHP – как?

Все мы знаем, что PHP является языком со слабой типизацей, и это является одновременно и плюсом, и минусом нашего любимого ЯП. На днях попалась интересная статья на эту тему, и я представляю вам ее краткое содержание (для всех интересующихся, я оставлю ссылки на источники в конце поста).

Итак, начнем. Базовой структурой данных в PHP является zval (сокращение от «Zend value»). Этот zval является структурой, написанной, на языке C, ведь именно на нем реализован интерпретатор PHP, и главные поля этой структуры – тип и значение.

Тип может принимать 8 значений (именно столько типов значений имеет PHP):

  • null: IS_NULL
  • булевое значение: IS_BOOL
  • целое число: IS_LONG
  • число с плавающей точкой: IS_DOUBLE
  • строка: IS_STRING
  • массив: IS_ARRAY
  • объект: IS_OBJECT
  • ресурс: IS_RESOURCE

Теперь вы знаете что можно ответить на вопрос о типах данных в PHP 😁 (все остальное является псевдотипами). Как вы, скорее всего, обратили внимание, числа разделяются на double и long.Если с double все, более или менее, понятно, то long стоит немного объяснить. Там может хранится только signed integer, то есть, только число, имеющее возможность принимать отрицательное значение.

Что же хранится в поле значения? Там лежит тип данных union, а значит, что он определяет несколько членов-данных различных типов, но в каждый момент времени может использоваться только одно значение из определенных в юнионе.

Источники: