Недавно я создал класс для создания элементов HTML. Вместо того, чтобы создавать методы для каждого существующего HTML-элемента и атрибутов, я решил использовать магические методы __get и __call. Так что с моим кодом я могу в основном сделать это:
$signUpForm->insert->input->type('text')->name('firstName')->maxlength(100)->disabled
$signUpForm->insert->input->type('email')->name('emailAddress')->maxlength(100)
и т.п.
Но так как я решил сохранить эту «магию» и простоту, я также мог сделать это:
$signUpForm->insert->magic->trick('rabbit')->accessory('hat')
что приведет к:
<magic trick='rabbit' accessory='hat'>
Это все хорошо, так как, на мой взгляд, он сокращает много стандартного кода и делает именно то, что мне нужно. Я не хочу, чтобы класс применял стандарты HTML, я хочу, чтобы класс облегчал HTML, если вы знаете, как его использовать (и, честно говоря, код для этого крошечный)
Итак, мой вопрос, учитывая, что этот класс может принимать любое неопределенное свойство или методы, есть ли способ указать это поведение в PHPDoc? Я попробовал следующее без какой-либо удачи:
/**
* @property HtmlElementAttribute * Insert a new HTML element attribute
* @method HtmlElementAttribute * Insert a new HTML element attribute
*/
Я не знаю, является ли это просто вещью PHPStorm, но я не мог найти где-либо подобный сценарий …
Также, если вам интересно, почему я так поступаю, нужно отслеживать определенные аспекты HTML в моем коде PHP (например, идентификаторы, объявленные в форме, или элементы внутри формы). Это может позволить мне видеть мой HTML-код перед его отправкой конечному пользователю.
Вопрос все еще томится в списке без ответа, поэтому я собираюсь ответить на него.
Для хорошего интеллекта кода в PhpStorm или же возвышенный при использовании автомагических методов, таких как __get()
а также __call()
, вам нужно включить @property
или же @method
строка для каждого неявного свойства или метода, который вы добавляете. Я знаю, что это отстой, но это стоимость использования таких методов.
Пожалуйста, учитывайте при использовании __get()
если ты действительно получаешь достаточно денег за свои деньги. Это может быть правильным для вашего приложения, в этом случае это нормально. Обычно мы используем его, когда пытаемся выполнить дальнейшую обработку или абстракцию данных объекта (такие как преобразование имени в случае верблюда). Вы сохраняете некоторый код (который PhpStorm все равно напишу для вас) но вам нужно будет написать PhpDoc DocBlock линии в классе.
Подумайте о включении всех строк, если ни по какой другой причине, чем документирование вашего класса. С неявными свойствами вы не только затрудняете IDE узнать, какие методы и атрибуты являются допустимыми членами, но и усложняете работу следующего сопровождающего. Эти строки документации могут показаться излишними, но они — отличная документация.
Других решений пока нет …