Apuntes sobre struct (constructivos, por las dudas)
1. Partiendo de la base de que los structs en C son declarados en tiempo de compilación y no de ejecución, dejaría de usar create para ello.
2. En el type hinting quizás el tipo 'object' sea muy genérico y fácilmente franqueable, sería de utilidad usar el operador de tipo
instanceof, además de gettype para tipos primitivos.
Código PHP:
Ver originalabstract class Struct {
private $data;
private $definition;
function __construct
(array $definition) { $this->definition = $definition;
}
function __get($name) {
return $this->data[$name];
}
function __set($name, $value) {
if (isset($this->definition[$name])) if (($value_type = gettype($value)) === ($definition_type = $this->definition[$name]) || $value instanceof
$definition_type) $this->data[$name] = $value;
else
throw new Exception("Trying to assign ({$definition_type}: {$name}) with {$value_type}");
else
throw new Exception("Trying to access undefined variable {$name}");
}
}
class Persona extends Struct {
function __construct() {
parent::__construct([
'nombre' => 'string',
'apellidos' => 'string',
'fecha_nacimiento' => 'DateTime',
'telefonos' => 'array'
]);
}
}
$p = new Persona;
$p->nombre = 'Pablo';
$p->apellidos = 'Bozzolo';
$p->fecha_nacimiento = new DateTime('1980-10-01');
$p->telefonos = ['435435435', '342343242'];
Que conste que este tipo de aritificios no están garantizados para un entorno de producción real, pero es un tema interesante al que últimamente se le da mucha vuelta por el foro, por ejemplo
este artificio para emular polimorfismo del amigo NSD.
Saludos.