<?php
class ProfsimmException extends Exception { }
class Foo implements ArrayAccess {
public function offsetExists ( $offset ) {
return array_key_exists($this->foo[$offset]);
}
public function offsetGet ( $offset ) {
return $this->foo[$offset];
}
public function offsetSet ( $offset, $value ) {
$this->foo[$offset] = $value;
}
public function offsetUnset ( $offset ) {
unset($this->foo[$offset]);
}
}
class Bar {
private $foo;
public function __construct() {
$this->foo = new Foo();
}
public function __set($prop, $value) {
$this->$prop = $value;
}
public function __get($prop) {
if ($this->$prop instanceof \ArrayAccess) {
throw new ProfsimmException("Nope.");
}
}
}
$bar = new Bar();
$bar->foo['abc'] = 'def';
var_dump($bar);
$foo = $bar->foo;
Deprecated: Return type of Foo::offsetExists($offset) should either be compatible with ArrayAccess::offsetExists(mixed $offset): bool, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /in/76auA on line 6
Deprecated: Return type of Foo::offsetGet($offset) should either be compatible with ArrayAccess::offsetGet(mixed $offset): mixed, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /in/76auA on line 10
Deprecated: Return type of Foo::offsetSet($offset, $value) should either be compatible with ArrayAccess::offsetSet(mixed $offset, mixed $value): void, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /in/76auA on line 14
Deprecated: Return type of Foo::offsetUnset($offset) should either be compatible with ArrayAccess::offsetUnset(mixed $offset): void, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /in/76auA on line 18
Fatal error: Uncaught ProfsimmException: Nope. in /in/76auA:36
Stack trace:
#0 /in/76auA(43): Bar->__get('foo')
#1 {main}
thrown in /in/76auA on line 36
Process exited with code 255.
Output for 8.3.5
Warning: PHP Startup: Unable to load dynamic library 'sodium.so' (tried: /usr/lib/php/8.3.5/modules/sodium.so (libsodium.so.23: cannot open shared object file: No such file or directory), /usr/lib/php/8.3.5/modules/sodium.so.so (/usr/lib/php/8.3.5/modules/sodium.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0
Deprecated: Return type of Foo::offsetExists($offset) should either be compatible with ArrayAccess::offsetExists(mixed $offset): bool, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /in/76auA on line 6
Deprecated: Return type of Foo::offsetGet($offset) should either be compatible with ArrayAccess::offsetGet(mixed $offset): mixed, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /in/76auA on line 10
Deprecated: Return type of Foo::offsetSet($offset, $value) should either be compatible with ArrayAccess::offsetSet(mixed $offset, mixed $value): void, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /in/76auA on line 14
Deprecated: Return type of Foo::offsetUnset($offset) should either be compatible with ArrayAccess::offsetUnset(mixed $offset): void, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /in/76auA on line 18
Fatal error: Uncaught ProfsimmException: Nope. in /in/76auA:36
Stack trace:
#0 /in/76auA(43): Bar->__get('foo')
#1 {main}
thrown in /in/76auA on line 36
Process exited with code 255.
Fatal error: Uncaught ProfsimmException: Nope. in /in/76auA:36
Stack trace:
#0 /in/76auA(43): Bar->__get('foo')
#1 {main}
thrown in /in/76auA on line 36
Process exited with code 255.