phpstan/phpstan

Support for array shape for ArrayAccess classes not working.

lulco opened this issue · 6 comments

lulco commented

Bug report

In #7619 there is mentioned the way how to use array shape for ArrayAccess https://phpstan.org/r/95a7bcea-3198-4297-8770-823861adacfb but it seems it is not working anymore. Can you please check it? Thank you very much.

@lulco After the latest push in 1.9.x, PHPStan now reports different result with your code snippet:

@@ @@
+PHP 8.1 (6 errors)
+==========
+
+21: Return type mixed of method Options::offsetGet() is not covariant with tentative return type mixed of method ArrayAccess::offsetGet().
 45: Dumped type: string
+46: Cannot assign offset 'name' to Options<array<string, string>>.
+46: Options<array{name: string}> does not accept string.
+47: Cannot assign offset 'name' to Options<array<string, string>>.
+47: Options<array{name: string}> does not accept int.
+
+PHP 7.1 – 8.0 (5 errors)
+==========
+
+45: Dumped type: string
+46: Cannot assign offset 'name' to Options<array<string, string>>.
+46: Options<array{name: string}> does not accept string.
+47: Cannot assign offset 'name' to Options<array<string, string>>.
 47: Options<array{name: string}> does not accept int.
Full report

PHP 8.1 (6 errors)

Line Error
21 Return type mixed of method Options::offsetGet() is not covariant with tentative return type mixed of method ArrayAccess::offsetGet().
45 Dumped type: string
46 Cannot assign offset 'name' to Options<array<string, string>>.
46 Options<array{name: string}> does not accept string.
47 Cannot assign offset 'name' to Options<array<string, string>>.
47 Options<array{name: string}> does not accept int.

PHP 7.1 – 8.0 (5 errors)

Line Error
45 Dumped type: string
46 Cannot assign offset 'name' to Options<array<string, string>>.
46 Options<array{name: string}> does not accept string.
47 Cannot assign offset 'name' to Options<array<string, string>>.
47 Options<array{name: string}> does not accept int.

I take a look at this and:

  • I can confirm the regression is coming from phpstan/phpstan-src#1623
  • If I comment the getResult method on the 1.8.3 branch the issue is solved
  • If I comment the getResult method on the 1.8.5 branch, the issue is still here
  • With git bisect, I discovered that commenting getResult is not enough because of the refacto phpstan/phpstan-src#1705

@rvanvelzen Since both of the PR were made by you, can you help me on this ?
Do you see the issue ?

@lulco After the latest push in 1.10.x, PHPStan now reports different result with your code snippet:

@@ @@
+PHP 8.1 (6 errors)
+==========
+
+21: Return type mixed of method Options::offsetGet() is not covariant with tentative return type mixed of method ArrayAccess<key-of<TArray of array>,value-of<TArray of array>>::offsetGet().
 45: Dumped type: string
+46: Cannot assign offset 'name' to Options<array<string, string>>.
+46: Options<array{name: string}> does not accept string.
+47: Cannot assign offset 'name' to Options<array<string, string>>.
+47: Options<array{name: string}> does not accept int.
+
+PHP 7.1 – 8.0 (5 errors)
+==========
+
+45: Dumped type: string
+46: Cannot assign offset 'name' to Options<array<string, string>>.
+46: Options<array{name: string}> does not accept string.
+47: Cannot assign offset 'name' to Options<array<string, string>>.
 47: Options<array{name: string}> does not accept int.
Full report

PHP 8.1 (6 errors)

Line Error
21 Return type mixed of method Options::offsetGet() is not covariant with tentative return type mixed of method ArrayAccess<key-of<TArray of array>,value-of<TArray of array>>::offsetGet().
45 Dumped type: string
46 Cannot assign offset 'name' to Options<array<string, string>>.
46 Options<array{name: string}> does not accept string.
47 Cannot assign offset 'name' to Options<array<string, string>>.
47 Options<array{name: string}> does not accept int.

PHP 7.1 – 8.0 (5 errors)

Line Error
45 Dumped type: string
46 Cannot assign offset 'name' to Options<array<string, string>>.
46 Options<array{name: string}> does not accept string.
47 Cannot assign offset 'name' to Options<array<string, string>>.
47 Options<array{name: string}> does not accept int.

@lulco After the latest push in 2.0.x, PHPStan now reports different result with your code snippet:

@@ @@
+PHP 8.1 (6 errors)
+==========
+
+21: Return type mixed of method Options::offsetGet() is not covariant with tentative return type mixed of method ArrayAccess::offsetGet().
 45: Dumped type: string
+46: Cannot assign offset 'name' to Options<array<string, string>>.
+46: Options<array{name: string}> does not accept string.
+47: Cannot assign offset 'name' to Options<array<string, string>>.
+47: Options<array{name: string}> does not accept int.
+
+PHP 8.0 (5 errors)
+==========
+
+45: Dumped type: string
+46: Cannot assign offset 'name' to Options<array<string, string>>.
+46: Options<array{name: string}> does not accept string.
+47: Cannot assign offset 'name' to Options<array<string, string>>.
+47: Options<array{name: string}> does not accept int.
+
+PHP 7.4 (24 errors)
+==========
+
+14: PHPDoc tag @param for parameter $offset with type key-of<TArray of array> is incompatible with native type mixed.
+14: Parameter #1 $offset (mixed) of method Options::offsetExists() is not contravariant with parameter #1 $offset (mixed) of method ArrayAccess::offsetExists().
+14: Parameter $offset of method Options::offsetExists() has invalid type mixed.
+21: PHPDoc tag @param for parameter $offset with type TOffset of key-of<TArray of array> is incompatible with native type mixed.
+21: Parameter #1 $offset (mixed) of method Options::offsetGet() is not contravariant with parameter #1 $offset (mixed) of method ArrayAccess::offsetGet().
+21: Parameter $offset of method Options::offsetGet() has invalid type mixed.
+21: Template type TOffset of method Options::offsetGet() is not referenced in a parameter.
+28: PHPDoc tag @param for parameter $offset with type TOffset of key-of<TArray of array> is incompatible with native type mixed.
+28: PHPDoc tag @param for parameter $value with type TArray[TOffset] is not subtype of native type mixed.
+28: Parameter #1 $offset (mixed) of method Options::offsetSet() is not contravariant with parameter #1 $offset (mixed) of method ArrayAccess::offsetSet().
+28: Parameter #2 $value (mixed) of method Options::offsetSet() is not contravariant with parameter #2 $value (mixed) of method ArrayAccess::offsetSet().
+28: Parameter $offset of method Options::offsetSet() has invalid type mixed.
+28: Parameter $value of method Options::offsetSet() has invalid type mixed.
+28: Template type TOffset of method Options::offsetSet() is not referenced in a parameter.
+34: PHPDoc tag @param for parameter $offset with type TOffset of key-of<TArray of array> is incompatible with native type mixed.
+34: Parameter #1 $offset (mixed) of method Options::offsetUnset() is not contravariant with parameter #1 $offset (mixed) of method ArrayAccess::offsetUnset().
+34: Parameter $offset of method Options::offsetUnset() has invalid type mixed.
+34: Template type TOffset of method Options::offsetUnset() is not referenced in a parameter.
+45: Dumped type: string
+45: Offset 'name' does not exist on Options<array{name: string}>.
+46: Cannot assign offset 'name' to Options<array<string, string>>.
+46: Options<array{name: string}> does not accept string.
+47: Cannot assign offset 'name' to Options<array<string, string>>.
+47: Options<array{name: string}> does not accept int.
+
+PHP 7.1 – 7.3 (24 errors)
+==========
+
+14: PHPDoc tag @param for parameter $offset with type key-of<TArray of array> is incompatible with native type mixed.
+14: Parameter #1 $offset (mixed) of method Options::offsetExists() is not compatible with parameter #1 $offset (mixed) of method ArrayAccess::offsetExists().
+14: Parameter $offset of method Options::offsetExists() has invalid type mixed.
+21: PHPDoc tag @param for parameter $offset with type TOffset of key-of<TArray of array> is incompatible with native type mixed.
+21: Parameter #1 $offset (mixed) of method Options::offsetGet() is not compatible with parameter #1 $offset (mixed) of method ArrayAccess::offsetGet().
+21: Parameter $offset of method Options::offsetGet() has invalid type mixed.
+21: Template type TOffset of method Options::offsetGet() is not referenced in a parameter.
+28: PHPDoc tag @param for parameter $offset with type TOffset of key-of<TArray of array> is incompatible with native type mixed.
+28: PHPDoc tag @param for parameter $value with type TArray[TOffset] is not subtype of native type mixed.
+28: Parameter #1 $offset (mixed) of method Options::offsetSet() is not compatible with parameter #1 $offset (mixed) of method ArrayAccess::offsetSet().
+28: Parameter #2 $value (mixed) of method Options::offsetSet() is not compatible with parameter #2 $value (mixed) of method ArrayAccess::offsetSet().
+28: Parameter $offset of method Options::offsetSet() has invalid type mixed.
+28: Parameter $value of method Options::offsetSet() has invalid type mixed.
+28: Template type TOffset of method Options::offsetSet() is not referenced in a parameter.
+34: PHPDoc tag @param for parameter $offset with type TOffset of key-of<TArray of array> is incompatible with native type mixed.
+34: Parameter #1 $offset (mixed) of method Options::offsetUnset() is not compatible with parameter #1 $offset (mixed) of method ArrayAccess::offsetUnset().
+34: Parameter $offset of method Options::offsetUnset() has invalid type mixed.
+34: Template type TOffset of method Options::offsetUnset() is not referenced in a parameter.
+45: Dumped type: string
+45: Offset 'name' does not exist on Options<array{name: string}>.
+46: Cannot assign offset 'name' to Options<array<string, string>>.
+46: Options<array{name: string}> does not accept string.
+47: Cannot assign offset 'name' to Options<array<string, string>>.
 47: Options<array{name: string}> does not accept int.
Full report

PHP 8.1 (6 errors)

Line Error
21 Return type mixed of method Options::offsetGet() is not covariant with tentative return type mixed of method ArrayAccess::offsetGet().
45 Dumped type: string
46 Cannot assign offset 'name' to Options<array<string, string>>.
46 Options<array{name: string}> does not accept string.
47 Cannot assign offset 'name' to Options<array<string, string>>.
47 Options<array{name: string}> does not accept int.

PHP 8.0 (5 errors)

Line Error
45 Dumped type: string
46 Cannot assign offset 'name' to Options<array<string, string>>.
46 Options<array{name: string}> does not accept string.
47 Cannot assign offset 'name' to Options<array<string, string>>.
47 Options<array{name: string}> does not accept int.

PHP 7.4 (24 errors)

Line Error
14 PHPDoc tag @param for parameter $offset with type key-of<TArray of array> is incompatible with native type mixed.
14 Parameter #1 $offset (mixed) of method Options::offsetExists() is not contravariant with parameter #1 $offset (mixed) of method ArrayAccess::offsetExists().
14 Parameter $offset of method Options::offsetExists() has invalid type mixed.
21 PHPDoc tag @param for parameter $offset with type TOffset of key-of<TArray of array> is incompatible with native type mixed.
21 Parameter #1 $offset (mixed) of method Options::offsetGet() is not contravariant with parameter #1 $offset (mixed) of method ArrayAccess::offsetGet().
21 Parameter $offset of method Options::offsetGet() has invalid type mixed.
21 Template type TOffset of method Options::offsetGet() is not referenced in a parameter.
28 PHPDoc tag @param for parameter $offset with type TOffset of key-of<TArray of array> is incompatible with native type mixed.
28 PHPDoc tag @param for parameter $value with type TArray[TOffset] is not subtype of native type mixed.
28 Parameter #1 $offset (mixed) of method Options::offsetSet() is not contravariant with parameter #1 $offset (mixed) of method ArrayAccess::offsetSet().
28 Parameter #2 $value (mixed) of method Options::offsetSet() is not contravariant with parameter #2 $value (mixed) of method ArrayAccess::offsetSet().
28 Parameter $offset of method Options::offsetSet() has invalid type mixed.
28 Parameter $value of method Options::offsetSet() has invalid type mixed.
28 Template type TOffset of method Options::offsetSet() is not referenced in a parameter.
34 PHPDoc tag @param for parameter $offset with type TOffset of key-of<TArray of array> is incompatible with native type mixed.
34 Parameter #1 $offset (mixed) of method Options::offsetUnset() is not contravariant with parameter #1 $offset (mixed) of method ArrayAccess::offsetUnset().
34 Parameter $offset of method Options::offsetUnset() has invalid type mixed.
34 Template type TOffset of method Options::offsetUnset() is not referenced in a parameter.
45 Dumped type: string
45 Offset 'name' does not exist on Options<array{name: string}>.
46 Cannot assign offset 'name' to Options<array<string, string>>.
46 Options<array{name: string}> does not accept string.
47 Cannot assign offset 'name' to Options<array<string, string>>.
47 Options<array{name: string}> does not accept int.

PHP 7.1 – 7.3 (24 errors)

Line Error
14 PHPDoc tag @param for parameter $offset with type key-of<TArray of array> is incompatible with native type mixed.
14 Parameter #1 $offset (mixed) of method Options::offsetExists() is not compatible with parameter #1 $offset (mixed) of method ArrayAccess::offsetExists().
14 Parameter $offset of method Options::offsetExists() has invalid type mixed.
21 PHPDoc tag @param for parameter $offset with type TOffset of key-of<TArray of array> is incompatible with native type mixed.
21 Parameter #1 $offset (mixed) of method Options::offsetGet() is not compatible with parameter #1 $offset (mixed) of method ArrayAccess::offsetGet().
21 Parameter $offset of method Options::offsetGet() has invalid type mixed.
21 Template type TOffset of method Options::offsetGet() is not referenced in a parameter.
28 PHPDoc tag @param for parameter $offset with type TOffset of key-of<TArray of array> is incompatible with native type mixed.
28 PHPDoc tag @param for parameter $value with type TArray[TOffset] is not subtype of native type mixed.
28 Parameter #1 $offset (mixed) of method Options::offsetSet() is not compatible with parameter #1 $offset (mixed) of method ArrayAccess::offsetSet().
28 Parameter #2 $value (mixed) of method Options::offsetSet() is not compatible with parameter #2 $value (mixed) of method ArrayAccess::offsetSet().
28 Parameter $offset of method Options::offsetSet() has invalid type mixed.
28 Parameter $value of method Options::offsetSet() has invalid type mixed.
28 Template type TOffset of method Options::offsetSet() is not referenced in a parameter.
34 PHPDoc tag @param for parameter $offset with type TOffset of key-of<TArray of array> is incompatible with native type mixed.
34 Parameter #1 $offset (mixed) of method Options::offsetUnset() is not compatible with parameter #1 $offset (mixed) of method ArrayAccess::offsetUnset().
34 Parameter $offset of method Options::offsetUnset() has invalid type mixed.
34 Template type TOffset of method Options::offsetUnset() is not referenced in a parameter.
45 Dumped type: string
45 Offset 'name' does not exist on Options<array{name: string}>.
46 Cannot assign offset 'name' to Options<array<string, string>>.
46 Options<array{name: string}> does not accept string.
47 Cannot assign offset 'name' to Options<array<string, string>>.
47 Options<array{name: string}> does not accept int.

@lulco After the latest push in 2.0.x, PHPStan now reports different result with your code snippet:

@@ @@
+PHP 8.1 (6 errors)
+==========
+
+21: Return type mixed of method Options::offsetGet() is not covariant with tentative return type mixed of method ArrayAccess<key-of<TArray of array>,value-of<TArray of array>>::offsetGet().
 45: Dumped type: string
+46: Cannot assign offset 'name' to Options<array<string, string>>.
+46: Options<array{name: string}> does not accept string.
+47: Cannot assign offset 'name' to Options<array<string, string>>.
+47: Options<array{name: string}> does not accept int.
+
+PHP 8.0 (5 errors)
+==========
+
+45: Dumped type: string
+46: Cannot assign offset 'name' to Options<array<string, string>>.
+46: Options<array{name: string}> does not accept string.
+47: Cannot assign offset 'name' to Options<array<string, string>>.
+47: Options<array{name: string}> does not accept int.
+
+PHP 7.4 (24 errors)
+==========
+
+14: PHPDoc tag @param for parameter $offset with type key-of<TArray of array> is incompatible with native type mixed.
+14: Parameter #1 $offset (mixed) of method Options::offsetExists() is not contravariant with parameter #1 $offset (mixed) of method ArrayAccess<key-of<TArray of array>,value-of<TArray of array>>::offsetExists().
+14: Parameter $offset of method Options::offsetExists() has invalid type mixed.
+21: PHPDoc tag @param for parameter $offset with type TOffset of key-of<TArray of array> is incompatible with native type mixed.
+21: Parameter #1 $offset (mixed) of method Options::offsetGet() is not contravariant with parameter #1 $offset (mixed) of method ArrayAccess<key-of<TArray of array>,value-of<TArray of array>>::offsetGet().
+21: Parameter $offset of method Options::offsetGet() has invalid type mixed.
+21: Template type TOffset of method Options::offsetGet() is not referenced in a parameter.
+28: PHPDoc tag @param for parameter $offset with type TOffset of key-of<TArray of array> is incompatible with native type mixed.
+28: PHPDoc tag @param for parameter $value with type TArray[TOffset] is not subtype of native type mixed.
+28: Parameter #1 $offset (mixed) of method Options::offsetSet() is not contravariant with parameter #1 $offset (mixed) of method ArrayAccess<key-of<TArray of array>,value-of<TArray of array>>::offsetSet().
+28: Parameter #2 $value (mixed) of method Options::offsetSet() is not contravariant with parameter #2 $value (mixed) of method ArrayAccess<key-of<TArray of array>,value-of<TArray of array>>::offsetSet().
+28: Parameter $offset of method Options::offsetSet() has invalid type mixed.
+28: Parameter $value of method Options::offsetSet() has invalid type mixed.
+28: Template type TOffset of method Options::offsetSet() is not referenced in a parameter.
+34: PHPDoc tag @param for parameter $offset with type TOffset of key-of<TArray of array> is incompatible with native type mixed.
+34: Parameter #1 $offset (mixed) of method Options::offsetUnset() is not contravariant with parameter #1 $offset (mixed) of method ArrayAccess<key-of<TArray of array>,value-of<TArray of array>>::offsetUnset().
+34: Parameter $offset of method Options::offsetUnset() has invalid type mixed.
+34: Template type TOffset of method Options::offsetUnset() is not referenced in a parameter.
+45: Dumped type: string
+45: Offset 'name' does not exist on Options<array{name: string}>.
+46: Cannot assign offset 'name' to Options<array<string, string>>.
+46: Options<array{name: string}> does not accept string.
+47: Cannot assign offset 'name' to Options<array<string, string>>.
+47: Options<array{name: string}> does not accept int.
+
+PHP 7.1 – 7.3 (24 errors)
+==========
+
+14: PHPDoc tag @param for parameter $offset with type key-of<TArray of array> is incompatible with native type mixed.
+14: Parameter #1 $offset (mixed) of method Options::offsetExists() is not compatible with parameter #1 $offset (mixed) of method ArrayAccess<key-of<TArray of array>,value-of<TArray of array>>::offsetExists().
+14: Parameter $offset of method Options::offsetExists() has invalid type mixed.
+21: PHPDoc tag @param for parameter $offset with type TOffset of key-of<TArray of array> is incompatible with native type mixed.
+21: Parameter #1 $offset (mixed) of method Options::offsetGet() is not compatible with parameter #1 $offset (mixed) of method ArrayAccess<key-of<TArray of array>,value-of<TArray of array>>::offsetGet().
+21: Parameter $offset of method Options::offsetGet() has invalid type mixed.
+21: Template type TOffset of method Options::offsetGet() is not referenced in a parameter.
+28: PHPDoc tag @param for parameter $offset with type TOffset of key-of<TArray of array> is incompatible with native type mixed.
+28: PHPDoc tag @param for parameter $value with type TArray[TOffset] is not subtype of native type mixed.
+28: Parameter #1 $offset (mixed) of method Options::offsetSet() is not compatible with parameter #1 $offset (mixed) of method ArrayAccess<key-of<TArray of array>,value-of<TArray of array>>::offsetSet().
+28: Parameter #2 $value (mixed) of method Options::offsetSet() is not compatible with parameter #2 $value (mixed) of method ArrayAccess<key-of<TArray of array>,value-of<TArray of array>>::offsetSet().
+28: Parameter $offset of method Options::offsetSet() has invalid type mixed.
+28: Parameter $value of method Options::offsetSet() has invalid type mixed.
+28: Template type TOffset of method Options::offsetSet() is not referenced in a parameter.
+34: PHPDoc tag @param for parameter $offset with type TOffset of key-of<TArray of array> is incompatible with native type mixed.
+34: Parameter #1 $offset (mixed) of method Options::offsetUnset() is not compatible with parameter #1 $offset (mixed) of method ArrayAccess<key-of<TArray of array>,value-of<TArray of array>>::offsetUnset().
+34: Parameter $offset of method Options::offsetUnset() has invalid type mixed.
+34: Template type TOffset of method Options::offsetUnset() is not referenced in a parameter.
+45: Dumped type: string
+45: Offset 'name' does not exist on Options<array{name: string}>.
+46: Cannot assign offset 'name' to Options<array<string, string>>.
+46: Options<array{name: string}> does not accept string.
+47: Cannot assign offset 'name' to Options<array<string, string>>.
 47: Options<array{name: string}> does not accept int.
Full report

PHP 8.1 (6 errors)

Line Error
21 Return type mixed of method Options::offsetGet() is not covariant with tentative return type mixed of method ArrayAccess<key-of<TArray of array>,value-of<TArray of array>>::offsetGet().
45 Dumped type: string
46 Cannot assign offset 'name' to Options<array<string, string>>.
46 Options<array{name: string}> does not accept string.
47 Cannot assign offset 'name' to Options<array<string, string>>.
47 Options<array{name: string}> does not accept int.

PHP 8.0 (5 errors)

Line Error
45 Dumped type: string
46 Cannot assign offset 'name' to Options<array<string, string>>.
46 Options<array{name: string}> does not accept string.
47 Cannot assign offset 'name' to Options<array<string, string>>.
47 Options<array{name: string}> does not accept int.

PHP 7.4 (24 errors)

Line Error
14 PHPDoc tag @param for parameter $offset with type key-of<TArray of array> is incompatible with native type mixed.
14 Parameter #1 $offset (mixed) of method Options::offsetExists() is not contravariant with parameter #1 $offset (mixed) of method ArrayAccess<key-of<TArray of array>,value-of<TArray of array>>::offsetExists().
14 Parameter $offset of method Options::offsetExists() has invalid type mixed.
21 PHPDoc tag @param for parameter $offset with type TOffset of key-of<TArray of array> is incompatible with native type mixed.
21 Parameter #1 $offset (mixed) of method Options::offsetGet() is not contravariant with parameter #1 $offset (mixed) of method ArrayAccess<key-of<TArray of array>,value-of<TArray of array>>::offsetGet().
21 Parameter $offset of method Options::offsetGet() has invalid type mixed.
21 Template type TOffset of method Options::offsetGet() is not referenced in a parameter.
28 PHPDoc tag @param for parameter $offset with type TOffset of key-of<TArray of array> is incompatible with native type mixed.
28 PHPDoc tag @param for parameter $value with type TArray[TOffset] is not subtype of native type mixed.
28 Parameter #1 $offset (mixed) of method Options::offsetSet() is not contravariant with parameter #1 $offset (mixed) of method ArrayAccess<key-of<TArray of array>,value-of<TArray of array>>::offsetSet().
28 Parameter #2 $value (mixed) of method Options::offsetSet() is not contravariant with parameter #2 $value (mixed) of method ArrayAccess<key-of<TArray of array>,value-of<TArray of array>>::offsetSet().
28 Parameter $offset of method Options::offsetSet() has invalid type mixed.
28 Parameter $value of method Options::offsetSet() has invalid type mixed.
28 Template type TOffset of method Options::offsetSet() is not referenced in a parameter.
34 PHPDoc tag @param for parameter $offset with type TOffset of key-of<TArray of array> is incompatible with native type mixed.
34 Parameter #1 $offset (mixed) of method Options::offsetUnset() is not contravariant with parameter #1 $offset (mixed) of method ArrayAccess<key-of<TArray of array>,value-of<TArray of array>>::offsetUnset().
34 Parameter $offset of method Options::offsetUnset() has invalid type mixed.
34 Template type TOffset of method Options::offsetUnset() is not referenced in a parameter.
45 Dumped type: string
45 Offset 'name' does not exist on Options<array{name: string}>.
46 Cannot assign offset 'name' to Options<array<string, string>>.
46 Options<array{name: string}> does not accept string.
47 Cannot assign offset 'name' to Options<array<string, string>>.
47 Options<array{name: string}> does not accept int.

PHP 7.1 – 7.3 (24 errors)

Line Error
14 PHPDoc tag @param for parameter $offset with type key-of<TArray of array> is incompatible with native type mixed.
14 Parameter #1 $offset (mixed) of method Options::offsetExists() is not compatible with parameter #1 $offset (mixed) of method ArrayAccess<key-of<TArray of array>,value-of<TArray of array>>::offsetExists().
14 Parameter $offset of method Options::offsetExists() has invalid type mixed.
21 PHPDoc tag @param for parameter $offset with type TOffset of key-of<TArray of array> is incompatible with native type mixed.
21 Parameter #1 $offset (mixed) of method Options::offsetGet() is not compatible with parameter #1 $offset (mixed) of method ArrayAccess<key-of<TArray of array>,value-of<TArray of array>>::offsetGet().
21 Parameter $offset of method Options::offsetGet() has invalid type mixed.
21 Template type TOffset of method Options::offsetGet() is not referenced in a parameter.
28 PHPDoc tag @param for parameter $offset with type TOffset of key-of<TArray of array> is incompatible with native type mixed.
28 PHPDoc tag @param for parameter $value with type TArray[TOffset] is not subtype of native type mixed.
28 Parameter #1 $offset (mixed) of method Options::offsetSet() is not compatible with parameter #1 $offset (mixed) of method ArrayAccess<key-of<TArray of array>,value-of<TArray of array>>::offsetSet().
28 Parameter #2 $value (mixed) of method Options::offsetSet() is not compatible with parameter #2 $value (mixed) of method ArrayAccess<key-of<TArray of array>,value-of<TArray of array>>::offsetSet().
28 Parameter $offset of method Options::offsetSet() has invalid type mixed.
28 Parameter $value of method Options::offsetSet() has invalid type mixed.
28 Template type TOffset of method Options::offsetSet() is not referenced in a parameter.
34 PHPDoc tag @param for parameter $offset with type TOffset of key-of<TArray of array> is incompatible with native type mixed.
34 Parameter #1 $offset (mixed) of method Options::offsetUnset() is not compatible with parameter #1 $offset (mixed) of method ArrayAccess<key-of<TArray of array>,value-of<TArray of array>>::offsetUnset().
34 Parameter $offset of method Options::offsetUnset() has invalid type mixed.
34 Template type TOffset of method Options::offsetUnset() is not referenced in a parameter.
45 Dumped type: string
45 Offset 'name' does not exist on Options<array{name: string}>.
46 Cannot assign offset 'name' to Options<array<string, string>>.
46 Options<array{name: string}> does not accept string.
47 Cannot assign offset 'name' to Options<array<string, string>>.
47 Options<array{name: string}> does not accept int.