PHP 8.3 is available with cool features you might not know yet.
You have now a built-in JSON validator
var_dump(json_validate('{ "test bad": { ')); // false
You can now type constants
Pretty cool new feature:
class MyClass
{
public const string MY_TABLE = 'my_table';
}
Also note that the visibility of constants defined in interfaces is now checked (which wasn't the case before).
The following code will throw an error in PHP 8.3:
interface MyInterface {
public const HOLY_CONST = 'constantly constant';
}
class MyClass implements MyInterface {
private const HOLY_CONST = 'constantly constant';
}
PHP can now detect stack overflows
Thanks to new built-in directives max_allowed_stack_size
and reserved_stack_size
(INI setting), PHP can detect when the program is about to overflow the stack.
The idea is to throw an exception before the stack overflows instead of letting the program exhaust the memory. This is automatic but you can still set custom values if you know what you're doing.
While these new mechanisms look efficient, it cannot prevent all kinds of stack overflows. However, this RFC aims to improve the developer experience in most cases.
You can catch more specific Date/Time exceptions
Catching Date/Time exceptions can be problematic is some cases, as they are not specific enough.
New exceptions such as DateMalformedIntervalStringException
or DateRangeError
will certainly improve the developer experience.
Source: rfc - datetime-exceptions
Improve readability with the #[\Override]
attribute
By adding the #[\Override] attribute to a method, PHP will ensure that a method with the same name exists in a parent class or in an implemented interface. Adding the attribute makes it clear that overriding a parent method is intentional and simplifies refactoring, because the removal of an overridden parent method will be detected.
Source: PHP 8.3 release announcement
Nice!
Wrap this up
This post is obviously not exhaustive, so please check this page to get more details.