<?php
class Struct {
function __construct() {
foreach (func_get_args() as $name) {
$this->$name = null;
}
}
function __invoke() {
$values = func_get_args();
$obj = clone $this;
foreach (array_keys(get_object_vars($this)) as $index => $name) {
if (isset($values[$index])) {
$obj->$name = $values[$index];
}
}
return $obj;
}
}
$Coord = new Struct('x', 'y', 'z');
$Coord->z = 0;
$c1 = $Coord(12, 45, -34);
print_r($c1);
$c2 = $Coord(100, -100);
print_r($c2);
$Person = new Struct('firstname', 'lastname');
$p1 = $Person('William', 'Wallace');
print_r($p1);
$p2 = $Person('Peter', 'Griffin');
print_r($p2);
/* If only:
struct person {
function __construct($firstname, $lastname) {
$this->firstname = $firstname;
$this->lastname = $lastname;
}
}
// So we could:
$p1 = person('William', 'Wallace');
// Instead of always:
$p1 = new Person(array('William', 'Wallace')); // or even
$p1 = new Person(array('firstname' => 'William', 'lastname' => 'Wallace')); // or
$p1 = Person::create(array('William', 'Wallace')); // etc
/**/
preferences:
37.88 ms | 402 KiB | 5 Q