Sniffs
Before version 5.4, PHP CompatInfo and its compatibility analyser was monolithic code.
Since version 5.4, PHP CompatInfo used a sniff architecture that simplify maintainability of existing code and allows to extend it more easily.
Each sniff, is in charge to detect a PHP language feature. Here is the list of features supported and their corresponding sniffs :
PHP 5.0
| Sniff category | Sniff class name | PHP Feature |
|---|---|---|
| Classes | MethodDeclarationSniff | Method Visibility |
| Classes | PropertyDeclarationSniff | Properties |
PHP 5.1
| Sniff category | Sniff class name | PHP Feature |
|---|---|---|
| Classes | MagicMethodsSniff | Magic Methods |
PHP 5.2
| Sniff category | Sniff class name | PHP Feature |
|---|---|---|
PHP 5.3
| Sniff category | Sniff class name | PHP Feature |
|---|---|---|
| Classes | MagicMethodsSniff | Magic Methods |
| Classes | DynamicAccessSniff | Dynamic Static Method access |
| Classes | DynamicAccessSniff | Dynamic Static Property access |
| ControlStructures | DeclareSniff | Declare |
| ControlStructures | GotoSniff | Goto |
| FunctionDeclarations | ClosureSniff | Anonymous functions |
VersionResolverVisitor |
Closures | |
| Operators | ShortTernaryOperatorSniff | Ternary Operator |
VersionResolverVisitor |
Namespaces | |
| TextProcessing | CryptStringSniff | CRYPT_BLOWFISH security fix details |
PHP 5.4
| Sniff category | Sniff class name | PHP Feature |
|---|---|---|
| Arrays | ArrayDereferencingSyntaxSniff | Array dereferencing |
| Arrays | ShortArraySyntaxSniff | Short array syntax |
| Classes | ClassMemberAccessSniff | Class member access on instantiation |
| Expressions | ClassExprSyntaxSniff | Class::{expr}() syntax |
| Numbers | BinaryNumberFormatSniff | Binary number format |
| UseDeclarations | UseTraitSniff | Traits |
VersionResolverVisitor |
Traits |
PHP 5.5
| Sniff category | Sniff class name | PHP Feature |
|---|---|---|
| Constants | MagicClassConstantSniff | ::class syntax |
| Expressions | EmptySniff | empty() supports arbitrary expressions |
| Generators | GeneratorSniff | Generators |
PHP 5.6
| Sniff category | Sniff class name | PHP Feature |
|---|---|---|
| Classes | MagicMethodsSniff | Magic Methods |
| Constants | ConstSyntaxSniff | Constant Expressions |
| Operators | PowOperatorSniff | Exponentiation |
| UseDeclarations | UseConstFunctionSniff | use function and use const |
PHP 7.0
| Sniff category | Sniff class name | PHP Feature |
|---|---|---|
| FunctionDeclarations | ParamTypeDeclarationSniff | Scalar type declarations |
| FunctionDeclarations | ReturnTypeDeclarationSniff | Return type declarations |
| Keywords | ReservedSniff | Scalar type declarations |
| Operators | NullCoalesceOperatorSniff | Null coalescing operator |
| Operators | CombinedComparisonOperatorSniff | Spaceship operator |
| Constant arrays using define() | ||
| Classes | AnonymousClassSniff | Anonymous classes |
| Classes | ClassMemberAccessSniff | Class member access on cloning |
| ControlStructures | DeclareSniff | Declare |
| Generators | GeneratorSniff | Generator Return Expressions |
| Generators | GeneratorSniff | Generator Delegation |
PHP 7.1
| Sniff category | Sniff class name | PHP Feature |
|---|---|---|
| FunctionDeclarations | ParamTypeDeclarationSniff | Nullable types |
| FunctionDeclarations | ReturnTypeDeclarationSniff | Nullable types |
| FunctionDeclarations | ReturnTypeDeclarationSniff | Void functions |
| Symmetric array destructuring | ||
| Class constant visibility | ||
| FunctionDeclarations | ParamTypeDeclarationSniff | iterable pseudo-type |
| Keywords | ReservedSniff | iterable pseudo-type |
| Multi catch exception handling | ||
| Support for keys in list() |
PHP 7.2
| Sniff category | Sniff class name | PHP Feature |
|---|---|---|
| Keywords | ReservedSniff | New object type |
PHP 7.3
| Sniff category | Sniff class name | PHP Feature |
|---|---|---|
| FunctionCalls | SameSiteCookieSniff | SetCookie accept $options argument |
PHP 7.4
| Sniff category | Sniff class name | PHP Feature |
|---|---|---|
| Arrays | ArrayUnpackingSyntaxSniff | Array unpacking support for numeric-keyed arrays |
| Classes | TypedPropertySniff | Typed properties |
| FunctionDeclarations | ArrowFunctionSniff | Arrow functions |
VersionResolverVisitor |
Arrow functions |
PHP 8.0
| Sniff category | Sniff class name | PHP Feature |
|---|---|---|
| Attributes | AttributeSniff | Attributes |
| Classes | PropertyPromotionSniff | Constructor property promotion |
| ControlStructures | MatchSniff | Match expressions |
| ControlStructures | NonCapturingCatchSniff | Non-capturing catches |
| FunctionDeclarations | NamedArgumentDeclarationSniff | Named arguments |
| FunctionDeclarations | ParamTypeDeclarationSniff | Union types |
| FunctionDeclarations | TrailingCommaSniff | Trailing comma |
| Operators | NullsafeOperatorSniff | Nullsafe operator |
PHP 8.1
| Sniff category | Sniff class name | PHP Feature |
|---|---|---|
| Arrays | ArrayUnpackingSyntaxSniff | Array unpacking support for string-keyed arrays |
| Classes | ReadonlyPropertySniff | Readonly Properties |
| Classes | NewInitializerSniff | New initializers |
| Constants | ClassConstantSniff | Final class constants |
| Enumerations | EnumerationSniff | Enumerations |
| Fibers | FiberSniff | Fibers |
| FunctionDeclarations | FirstClassCallableSniff | First class callable |
| FunctionDeclarations | ParamTypeDeclarationSniff | Pure Intersection Types |
| FunctionDeclarations | ReturnTypeDeclarationSniff | Pure Intersection Types |
| FunctionDeclarations | ReturnTypeDeclarationSniff | Never return type |
| Numbers | OctalNumberFormatSniff | Explicit Octal numeral notation |
PHP 8.2
| Sniff category | Sniff class name | PHP Feature |
|---|---|---|
| Attributes | AllowDynamicPropertiesAttributeSniff | AllowDynamicProperties attribute |
| Attributes | SensitiveParameterAttributeSniff | SensitiveParameter attribute |
| Classes | ReadonlyClassSniff | Readonly Classes |
| Constants | ConstantsInTraitsSniff | Constants in Traits |
| FunctionDeclarations | ParamTypeDeclarationSniff | Disjunctive Normal Form Types |
| FunctionDeclarations | ReturnTypeDeclarationSniff | Allow null, false, and true as stand-alone types |
| TextProcessing | DeprecateDollarBraceStringInterpolationSniff | Deprecated \${} string interpolation |
PHP 8.3
| Sniff category | Sniff class name | PHP Feature |
|---|---|---|
| Attributes | OverrideAttributeSniff | Override attribute |
| Constants | DynamicClassConstantFetchSniff | Dynamic Class Constant fetch syntax |
| Constants | TypedClassConstantSniff | Typed Class Constants |
| Expressions | StaticVarInitializerSniff | Static Variable initializers |
Special cases
- Namespaces declaration have no sniff, because its detected by the
VersionResolverVisitor - Classes declaration have no sniff, because its detected by the
VersionResolverVisitor - Interfaces declaration have no sniff, because its detected by the
VersionResolverVisitor - Traits declaration have no sniff, because its detected by the
VersionResolverVisitor - Closures are initialized by the
VersionResolverVisitorand keywords (this, self, parent, static) are detected withClosureSniff - Arrow functions have no sniff, because its detected by the
VersionResolverVisitor, but has its test case withArrowFunctionSniffTest