What are the changes in php 7 to php 8

post-title

1. JIT (Just In Time) Compilation

  • PHP 8 introduces JIT compilation, which improves the performance of PHP by compiling code into machine code at runtime.
  • This feature can offer significant performance improvements, particularly for CPU-bound tasks, though the benefits for typical web applications may be less noticeable.

2. Union Types

  • PHP 8 adds support for union types, which allow a function or method parameter to accept multiple types.
  • This provides greater flexibility for type declarations.

3.Named Arguments

  • PHP 8 introduces named arguments, allowing you to pass arguments to a function by specifying the parameter name, instead of relying on the order.
  • This makes the code more readable and allows for skipping optional parameters.

4. Attributes (Annotations)

  • PHP 8 introduces attributes, which provide a native way to add metadata to classes, methods, and properties. This replaces the need for docblock-based annotations.
  • Attributes can be used for things like routing, dependency injection, and validation in frameworks.

5. Constructor Property Promotion

  • This feature allows class properties to be promoted directly in the constructor signature, reducing boilerplate code.
  • This eliminates the need for separate property declarations and constructor assignments.

6. Match Expressions

  • PHP 8 introduces the match expression, which is similar to switch but with several improvements:
    • Strict comparison (===), no type coercion.
    • Can return values directly.
    • Supports multiple conditions in a single match arm.

7. Nullsafe Operator (?->)

  • The nullsafe operator (?->) allows you to call methods or access properties on objects that might be null without causing an error.
  • This eliminates the need for multiple null checks and makes the code cleaner.

8. Type System Improvements

  • PHP 8 introduces several changes to the type system:
    • Static return type: The static return type is now supported for fluent interfaces and methods that return an instance of the class itself.
    • Mixed type: The mixed type was added to explicitly indicate a value can be any type (previously, mixed was more of a concept rather than a declared type).
    • Improved type checking: Better handling of internal functions' types and improved consistency in error messages.

9. Error Handling Changes

  • PHP 8 changes the way some errors are handled:
    • Deprecation warnings: PHP 8 introduces new deprecations for features that will eventually be removed in future versions (e.g., #utf8_encode() and utf8_decode()).
    • TypeError and ValueError: Many cases that previously resulted in warnings now throw exceptions (such as passing an invalid argument type to a function).

10. Deprecations and Removed Features

  • Some features are deprecated or removed in PHP 8:
    • The real type: The real type has been removed in favor of float.
    • The each() function: The each() function is deprecated and removed in favor of using foreach.
    • The assert() function: The behavior of assert() is now more consistent with the AssertionError class.

11. Improvements to str_contains(), str_starts_with(), str_ends_with()

  • PHP 8 adds new helper functions to check if a string contains a substring, starts with a substring, or ends with a substring.
  • 12. Other Miscellaneous Changes

  • Saner var_dump output: The output of var_dump() now includes more informative details.
  • Improvements to the filter_var() function: It includes better validation and sanitization features for URL filtering.
  • New str_split() behavior: The str_split() function now correctly handles multibyte characters.