assoziative Werte mit __set() und Index in numerisches array einfügen?
bearbeitet von 1unitedpower> ~~~php
> 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:
~~~php
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:
~~~php
class FooBar {
/**
* @var string
*/
public $fuz;
/**
* @var array
*/
private $baz;
}
~~~