# Understanding PHP's Evolving Type System: A Detailed Overview
Written on
Chapter 1: Introduction to PHP's Type System
The enhancements introduced in PHP 7, particularly in its type system, stand out as key features alongside performance improvements. While many significant updates were not fully realized until PHP 8.0, the evolution of PHP’s type system has been substantial in recent years. This maturation process has encouraged some community projects to leverage types more effectively.
To appreciate these advancements, it's beneficial to compare the type systems of PHP 5 and PHP 8.
Section 1.1: Evolution of Built-in Types
One of the notable changes is the introduction of additional built-in types, known as "scalar" types, which include integers, strings, booleans, and floats. Before PHP 7, type hinting was limited to input parameters, resulting in a chaotic mix of doc block types and inline types.
This led to a convoluted and sometimes unreadable code structure, discouraging developers from utilizing types altogether due to the limited safety provided by doc blocks. These blocks were not interpreted by PHP itself; only IDEs could comprehend them.
As of PHP 7.0, the previous example can be rewritten more effectively:
This revised structure retains the same information but is significantly more streamlined and validated by the interpreter.
Section 1.2: Introduction of Typed Properties
In addition to parameter and return types, PHP now supports typed properties within classes. Similar to other types, these are optional, meaning PHP won't enforce type checks.
Both scalar types and objects are permissible. An intriguing aspect of typed properties is their behavior in certain scenarios. For example, consider the following situation:
In this case, the Invoice class lacks a constructor, and the $amount property is unassigned. Although the value isn't an integer, PHP only raises an error when attempting to access the property.
This introduces a new variable state: uninitialized. If the $amount property remains unset, it defaults to null. It's crucial to differentiate between nullable typed properties and uninitialized ones.
Key points to remember include:
- Attempting to read from uninitialized properties results in a fatal error.
- Writing to an uninitialized property is permitted before any read attempts.
- Using unset on a typed property makes it uninitialized, while unset on an already uninitialized property sets it to null.
Chapter 2: Practical Learning Resources
To further enhance your understanding of PHP, consider the following resources:
This course, "Learn PHP: Complete Beginner's Guide, Full Course," offers a comprehensive introduction to PHP for newcomers.
Additionally, "PHP For Beginners | 3+ Hour Crash Course" provides an in-depth overview, perfect for those looking to solidify their knowledge in a short time.