Это все компромисс.Код MO'P действительно вызывает проблемы, если вы хотите полагаться на автозаполнение IDE.Положительным моментом является то, что у вас есть удобный удобный внутренний массив, который может очень легко реализовать такие функции, как реализация функции __toArray ().
Компромисс, который вы предлагаете, кажется мне глупым.Ваша IDE по-прежнему не сможет помочь вам при построении аргументов, а ваша магия __set () в основном просто делает ваши защищенные свойства эффективно открытыми.Вы можете добавить магию так же, как в ответе Чарльза, с теми же оговорками, которые упоминаются (а именно, что у вас все еще будут проблемы с автозаполнением).
Я также многому научился из сообщений MO'P, нов общем, не стоит реализовывать вещи так, как он.Большая часть его примера кода предназначена для демонстрации концепции, а не для практического практического подхода.
Конструкторы с одним аргументом могут быть очень полезны, если у вас много необязательных ключей конфигурации.В идеальном мире, возможно, будет какое-то расширение phpDoc, чтобы вы могли задокументировать действительные ключи конфигурационного массива для конструкторов.
Тем не менее, если вы хотите полагаться на автозаполнение и не хотитеявный набор псевдосвойств для таких вещей, как __toArray (), вам лучше просто создавать публичные свойства или методы set, добавлять phpDocs и не иметь конструктор, устанавливающий какие-либо из них.Просто заставьте потребляющий код явно настраивать объект с помощью присваивания или вызова метода.