Поскольку вы вызываете методы из области за пределами класса.
Например:
// this can be any class with __get() and __set methods
$YourClass = new YourOverloadableClass();
// this is an overloaded property
$YourClass->overloaded = 'test';
Код выше "преобразован" в:
$YourClass->__set('overloaded', 'test');
Позже, когда вы получите значение свойства, как:
$var = $YourClass->overloaded;
Этот код "конвертируется" в:
$YourClass->__get('overloaded');
В каждом случае магический метод __get
и __set
вызывается извне класса, поэтому эти методы должны быть public
.