Хочу, чтобы динамическое объявление свойств объекта вызывало ошибку

ChAk

Новичок
Как сделать что бы такой код приводил к ошибки в строке динамического объявления свойства?
PHP:
class Test {
}
$test = new Test();
$test->a = 1;
Можно так но это нужно менять классы, а не хотелось бы.
PHP:
class Test {
  public function  __set($a,$b) {
  trigger_error($a.$b);
  }
}
Зачем? Для отладки, много рефактирил и есть опасения что где-то что то мог пропустить, а если бы ругалось ошибкой на это было бы проще найти такие места.
 

Вурдалак

Продвинутый новичок
К сожалению, никак. Достаточно просто пользоваться IDE, тогда шанс допустить такую ошибку минимален: автокомлит будет подставлять сам.
 
  • Like
Реакции: ChAk

hell0w0rd

Продвинутый новичок
В phpstorm можно сделать анализ и по идее такое будет в "code smells"
Можно также написать расширение на си которое это будет перехватывать
возможно это можно сделать через расширение runkit
 

Dez

Новичок
Не зря в yii все наследование идет от базового класса Object, где такая(__set) проверка и прописана.
 

Dez

Новичок
Возможность навески на объект вот этих свойств в вакууме на лету - вот это действительно странная идея для ООР. А пхп позволяет.
 

hell0w0rd

Продвинутый новичок
Dez, а еще js это позволяет и имеет по умолчанию arrayAccess интерфейс и что в этом плохого?
Подобные возможности надо пихать в трейты и использовать только там, где это действительно нужно.
 

Dez

Новичок
js это однозначно показательный такой ооп язык :)

В том то и дело что эта фигня нигде не нужна, а только запутывает все дело. А где она надо, можно и трейтом переопределить или в самом классе.
 

hell0w0rd

Продвинутый новичок
ChAk, я знаю как это сделать, но могу только объяснить
Пихаешь в автолаодер функцию в самый перед, которая:
  1. находит класс
  2. берет код
  3. добавляет метод __set
  4. evalит код
  5. ...
  6. PROFIT!
Парсить содержимое кода не надо, воспользуйся рефлексией, там можно получить строку конца объявления класса
 
Сверху