68 lines
1.3 KiB
PHP
68 lines
1.3 KiB
PHP
<?php declare(strict_types = 1);
|
|
/**
|
|
* Abstract data transfer object.
|
|
*/
|
|
|
|
/**
|
|
* @implements ArrayAccess<string,mixed>
|
|
*/
|
|
#[AllowDynamicProperties]
|
|
abstract class QM_Data implements \ArrayAccess {
|
|
/**
|
|
* @var array<string, mixed>
|
|
*/
|
|
public $types = array();
|
|
|
|
/**
|
|
* @var array<string, array<string, mixed>>
|
|
* @phpstan-var array<string, array{
|
|
* component: string,
|
|
* ltime: float,
|
|
* types: array<array-key, int>,
|
|
* }>
|
|
*/
|
|
public $component_times = array();
|
|
|
|
/**
|
|
* @param mixed $offset
|
|
* @param mixed $value
|
|
* @return void
|
|
*/
|
|
#[ReturnTypeWillChange]
|
|
final public function offsetSet( $offset, $value ) {
|
|
if ( is_string( $offset ) ) {
|
|
$this->$offset = $value;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @param mixed $offset
|
|
* @return bool
|
|
*/
|
|
#[ReturnTypeWillChange]
|
|
final public function offsetExists( $offset ) {
|
|
return is_string( $offset ) && isset( $this->$offset );
|
|
}
|
|
|
|
/**
|
|
* @param mixed $offset
|
|
* @return void
|
|
*/
|
|
#[ReturnTypeWillChange]
|
|
final public function offsetUnset( $offset ) {
|
|
// @TODO might be able to no-op this
|
|
if ( is_string( $offset ) ) {
|
|
unset( $this->$offset );
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @param mixed $offset
|
|
* @return mixed
|
|
*/
|
|
#[ReturnTypeWillChange]
|
|
final public function offsetGet( $offset ) {
|
|
return ( is_string( $offset ) && isset( $this->$offset ) ) ? $this->$offset : null;
|
|
}
|
|
}
|