Ваш звонок вместо этого будет:
$source = new Sourcerer();
$source->apprentice->magic();
Также я считаю, что магический метод __get()
работает со свойствами, а не с именами методов.
Наконец, в вашем фактическом определении __get()
синтаксис неверен: он должен быть throw new Exception('message');
. Я бы также переместил это в предложение else
, в противном случае он будет запускаться при каждом вызове независимо от того, находится ли он вне любой if
/ else
или другой логики.