У меня проблема в том, что магический метод __set () по своей природе работает только для необъявленных свойств. Есть ли __set () как решение для объявленных свойств, где я могу вызвать метод, когда свойство установлено? Объявленные свойства значительно повысят удобство использования для классов, которые я разрабатываю, особенно для IDE.
Нет, вы не можете использовать магию для свойств и методов, объявленных или видимых в текущей области. Php вызывает их только в том случае, если не может найти объявление в классе. Вот что документация говорит об этом:
Методы перегрузки вызываются при взаимодействии со свойствами или методами, которые не были объявлены или не видны в текущей области.
Но вы можете помочь большинству IDE, в частности PhpStorm, я уверен, что Netbeans также поддерживает это, предоставив PHPDoc для класса со свойствами и методами:
/**
* @property string $myProperty
* @method string myMethod(int $param = 10)
*/
class MyClass
{
}
Других решений пока нет …