class FooBar { private $fuz; private $baz; public function __get( string $property ) { return $this->$property; } public function __set( string $property, $value ) { if( $property === 'fuz' and is_string( $value ) ) { $this->fuz = $value; } if( $property === 'baz' and is_array( $value ) ) { $this->baz = $value; } } }
Das ist natürlich wirklich sehr kurz, aber damit erkaufst du dir auch ein paar Nachteile: Die Autovervollständigung von Editoren leidet darunter, wenn Typ-Informationen, sowie hier, erst zur Laufzeit bekannt werden. Das selbe gilt für Code-Qualitäts-Tools, die auf statische Typ-Informationen angewiesen sind und letztlich erschwerst du dir selber das Unit-Testing, wenn du es denn benutzt. Wenn es etwas länger sein darf, aber ohne die genannten Nachteile, dann würde ich es so schreiben:
class FooBar {
private $fuz;
private $baz;
public function setFuz(string $fuz) {
$this->fuz = $fuz;
}
public function getFuz() : string {
return $this->fuz;
}
public function setBar(array $bar) {
$this->bar = $bar;
}
public function getBar() : array {
return $this->bar;
}
}
Oder, du benutzt PHPDoc-Annotationen, damit wird der Code sogar noch kürzer als deine ursprüngliche Fassung und viele Programme können damit umgehen:
class FooBar {
/**
* @var string
*/
public $fuz;
/**
* @var array
*/
private $baz;
}