<?php
class Fillable{
public static function fill($props)
{
$cls = new static;
foreach($props as $key=>$value){
if (property_exists(static::class,$key)){
$cls->$key = $value;
}
}
return $cls;
}
}
class Vegetable extends Fillable
{
public $edible;
public $color;
}
$veg = Vegetable::fill([
'edible' => true,
'color' => 'green',
'name' => 'potato' //Will not get set as it's not a property of Vegetable. (you could also throw an error/warning here)
]);
PD9waHAKCmNsYXNzIEZpbGxhYmxlewogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBmaWxsKCRwcm9wcykKICAgIHsKICAgICAgICAkY2xzID0gbmV3IHN0YXRpYzsKICAgICAgICBmb3JlYWNoKCRwcm9wcyBhcyAka2V5PT4kdmFsdWUpewogICAgICAgICAgICBpZiAocHJvcGVydHlfZXhpc3RzKHN0YXRpYzo6Y2xhc3MsJGtleSkpewogICAgICAgICAgICAgICAgJGNscy0+JGtleSA9ICR2YWx1ZTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gJGNsczsKICAgIH0KfQpjbGFzcyBWZWdldGFibGUgZXh0ZW5kcyBGaWxsYWJsZQp7CgogICAgcHVibGljICRlZGlibGU7CiAgICBwdWJsaWMgJGNvbG9yOwp9CgokdmVnID0gVmVnZXRhYmxlOjpmaWxsKFsKICAgICdlZGlibGUnID0+IHRydWUsCiAgICAnY29sb3InID0+ICdncmVlbicsCiAgICAnbmFtZScgPT4gJ3BvdGF0bycgLy9XaWxsIG5vdCBnZXQgc2V0IGFzIGl0J3Mgbm90IGEgcHJvcGVydHkgb2YgVmVnZXRhYmxlLiAoeW91IGNvdWxkIGFsc28gdGhyb3cgYW4gZXJyb3Ivd2FybmluZyBoZXJlKQpdKTsKCnZhcl9kdW1wKCR2ZWcpOw==