Почему объект PHP принимает членов, которые упоминались только при вызове?

Я парадокс со следующим фрагментом кода, и я не уверен, как его назвать.

Я определил очень простой класс, который пока не имеет переменной. Теперь в конструкторе я принимаю массив ключей и значений и назначая переменные «на лету», как это, используя цикл foreach:

class Food{ function Food($construct){ foreach($construct as $key=>$value){ $this->$key = $value; } } } 

Если бы я теперь создал экземпляр с таким входом:

 $food = new Food(array('name' => 'chicken' , 'unit' => 'kg' , 'calorie' => 10000)); 

Я бы получил:

 var_dump($food); object(Food)[1] public 'name' => string 'chicken' (length=7) public 'unit' => string 'kg' (length=2) public 'calorie' => int 10000 

Как это вообще возможно?