Ich weiß, ich bin super spät zu der Party hier, aber ich kam mit einem ziemlich flexiblen Muster, das einige wirklich interessante und vielseitige Implementierungen ermöglichen sollte.
Richten Sie Ihre Klasse so ein, wie Sie es normalerweise tun würden, mit beliebigen Variablen.
class MyClass{
protected $myVar1;
protected $myVar2;
public function __construct($obj = null){
if($obj){
foreach (((object)$obj) as $key => $value) {
if(isset($value) && in_array($key, array_keys(get_object_vars($this)))){
$this->$key = $value;
}
}
}
}
}
Wenn Sie Ihr Objekt einfach ein assoziatives Array mit den Schlüsseln des Arrays die gleichen wie die Namen Ihrer vars, wie so...
$sample_variable = new MyClass([
'myVar2'=>123,
'i_dont_want_this_one'=> 'This won\'t make it into the class'
]);
print_r($sample_variable);
En print_r($sample_variable);
nach dieser Instanziierung ergibt sich folgendes:
MyClass Object ( [myVar1:protected] => [myVar2:protected] => 123 )
Denn wir haben initialisiert $group
auf Null in unserem __construct(...)
ist es auch möglich, dem Konstruktor überhaupt nichts zu übergeben, etwa so...
$sample_variable = new MyClass();
print_r($sample_variable);
Jetzt ist die Ausgabe genau wie erwartet:
MyClass Object ( [myVar1:protected] => [myVar2:protected] => )
Der Grund, warum ich dies geschrieben habe, war, dass ich die Ausgabe von json_decode(...)
zu meinem Konstruktor hinzufügen, ohne sich allzu viele Gedanken darüber zu machen.
Dies wurde in PHP 7.1 ausgeführt. Viel Spaß!