Допустим ситуацию:
- Вы создали некий модуль MyModule, в котором использовали класс MeguminMagick.
- MyModule вы опубликовали на github...
- Другие пользователи взяли MyModule в свои проекты...
В первом случае ваш MyModule не обладает возможностью настройки ибо для изменения переменной $magick нужно "влезть" в ваш код и переписать его... Это очень плохо... Ибо когда вы будете обновлять ваш MyModule возникнут конфликты...
Во втором случае - сеттер позволит настроить MyModule не изменяя его код. Что и является его гибкостью... С другой стороны для этого вам нужно будет поработать больше - дописать сеттеры, геттеры и т.д...
Короче - первый способ короче и быстрее и удобнее лично вам. Другой - ориентированный на использования другими разработчиками в своих проектах.
Если быть еще дотошнее - используйте и первый и второй способы вместе...
Задайте значение для $magick и напишите для этой переменной сеттер и геттер:
/**
* @var string
*/
public $magick = 'explosion stuff';
/**
* Set magick instance
*
* @return MeguminMagick
*/
public function setMagick($magick)
{
$this->magick = (string) $magick;
return $this;
}
/**
* Get magick instance
*
* @return string
*/
public function getMagick()
{
if (!is_string($this->magick)) {
throw new \InvalidArgumentException(sprintf('"%s" expects string.', __METHOD__));
};
return $this->magick;
}