в приложении необходимо проверить является ли метод магическим. как это сделать? Код (Text): class myClass { public function __call($method, $arguments) { return 'is magic'; } public function notMagic() { return 'not a magic'; } } $reflection = new ReflectionMethod('myClass', 'magic'); if ($reflection->isMagic()) { /* do some shit if is magic */ }
может я не так объяснил. есть метод который я вызываю, мне перед вызовом необходимо узнать как описан этот метод так: Код (Text): public function notMagic() { return 'not a magic'; } или так: Код (Text): public function __call($method, $arguments) { if ($method == 'magic') { return 'is magic'; } } Добавлено спустя 1 минуту 3 секунды: нужно Добавлено спустя 3 минуты 11 секунд: вы вообще пример читали?
я скорее всего не правильно выразился, не магический метод, а метод описанный с помощью __call() или __callStatic() или __set()
Скорее это просто проверит, существует ли метод, а ему нужно определение, откуда он был вызван из волшебного или из простого.
использую фактори, на лету создаю методы, необходимо проверить наличие метода перед его созданием. Конкретно проблема с пересечением моих методов с методами актив рекорда. то есть: мне необходимо налету создать геттер/сеттер для свойства класса созданного динамически, но класс экстендится от класса который описывает актив рекорд. получается если объект AR имеет свойство типа $ar->title то производный класс (мой) не должен создовать одноименный геттер/сеттер а подтянуть значение из ролителя Добавлено спустя 2 минуты 14 секунд: если бы все так просто
В AR тоже магия? Тогда что происходит, если вызвать несуществующее? Исключение? Тогда ловите исключение.
думаю вам стоит почитать это http://goo.gl/Nt6qsu Добавлено спустя 1 минуту 53 секунды: если свойства нет, вернет пустую строку
Думаю вам нужно меньше советовать, что думать другим. Реализации AR бывают разные, свойства вполне могут быть описаны явно. Паттерн AR вообще это никак не определяет. Добавлено спустя 1 минуту 33 секунды: Значит ваша задача не реализуема, а AR - говно, ибо должен бросать исключение. Единственный вариант - искать в AR место, где бы вы могли взять список свойств.
конечно не определяет, но где вы видели нормальный АР который при обращении к несуществующему полю ловит эксепшн?
В Yii, например. Вообще-то это должно быть нормой - отработка обращения к несуществующему свойству как ошибка. Добавлено спустя 1 минуту 23 секунды: Причем в идеале - своим исключением, в Yii там не очень хорошо - бросается общее исключение.
Дайте курнуть ребят) Если все налету то и сделай летающий метод который будет проверять этот влет =)))
ребята, возможно я не прав и на самом деле лучше выбрасывать, но вопрос не в этом. если есть желание, подумайте как решить етот вопрос Добавлено спустя 1 минуту 19 секунд: да легко делаю crud для laravel а Yii бросает ексепшн, факт
я не понимаю вопроса. если есть обращение к несуществующему полю, то стало быть структура бд корявая, и всё плохо.
вот для этого мне и нужно проверить если магия то не делать Добавлено спустя 1 минуту 6 секунд: слишком долго писать для чего мне это нужно, но нужно Добавлено спустя 5 минут 6 секунд: есть вариант написать трейт в которором описать __isset() и подключить его к АР, тогда можно будет проверять существование всех магически описанных свойств. если я правильно понял ман