Articles of magic methods

& __ get () снова. Основное разочарование

Хорошо, я очень расстроен, потому что я думал, что я решил эту проблему, или успешно это сделал раньше. Быстрое предварительное: PHP 5.3.6. Сообщение об ошибках сработало до 11. ( -1 самом деле, в будущем безопасно, все ошибки / уведомления ) У меня есть класс, он агрегирует параметры запроса. Для хихиканья здесь урезанная версия: class My_Request{ […]

PHP: переопределение родительских методов с помощью __call

Я хотел бы скрыть родительские методы каким-то образом, чтобы метод магии __call для дочернего класса вызывается для методов, определенных для родителя. Например: class C { function foo() { echo "foo\n"; } } class D extends C { function __call( $method, $args ) { echo "called $name\n"; } } $d = new D(); $d->foo(); // desired […]

CakePHP 2.0.4 – findBy магические методы с условиями

Я пытаюсь построить небольшой cms для тестирования CakePHP 2.x В моем PagesController (для отображения отдельных сайтов) я использую этот код: $page = $this->Page->findByNavtitle($name, array( 'conditions' => array( 'Page.visible' => '1', ), ) ); Результат должен устанавливаться только тогда, когда запись отмечена как видимая. Но этот код блокирует ошибку. API описывает, что только один параметр разрешен […]

PHP __get __set методы

class Dog { protected $bark = 'woof!'; public function __get($key) { if (isset($this->$key)) { return $this->$key; } } public function __set($key, $val) { if (isset($this->$key)) { $this->$key = $val; } } } В чем смысл использования этих функций. если я могу использовать $dog = new Dog(); $dog->bark = 'woofy'; echo $dog->bark; Почему я должен был […]

информирование интерфейсных методов осуществляется через __call?

У меня есть интерфейс, который декларирует методы реализации, такие как find, findOrFail и т. Д., В основном, красноречивые методы Laravel. Я объявляю эти методы в интерфейсе, потому что не все, что реализует интерфейс, будет красноречивым, поэтому я объявляю их в интерфейсе, поэтому мое приложение всегда знает, что методы будут там. Я хочу знать, кроме того, […]

Возвращать null по ссылке через __get ()

Быстрые спецификации: PHP 5.3 error_reporting(-1) // the highest Я использую __get() путем обращения к магическому доступу к произвольно глубоким элементам массива в объекте. Быстрый пример: public function &__get($key){ return isset($this->_data[$key]) ? $this->_data[$key] : null; } Это не работает, когда $key не задан, он пытается вернуть значение null по ссылке, что, конечно, бросает. Only variable references […]

Магический метод PHP __call на подклассах

Моя ситуация лучше всего описывается небольшим количеством кода: class Foo { function bar () { echo "called Foo::bar()"; } } class SubFoo extends Foo { function __call($func) { if ($func == "bar") { echo "intercepted bar()!"; } } } $subFoo = new SubFoo(); // what actually happens: $subFoo->bar(); // "called Foo:bar()" // what would be […]

Можно ли проверить, является ли переменная статичной в PHP?

Можно ли проверить, является ли переменная статичной в PHP? Я пытаюсь создать магический метод __get который также смотрит на статические переменные. Я обнаружил, что property_exists() возвращает true, когда переменная тоже статическая. Но мне нужно будет использовать :: вместо -> я бы ожидал?

Увеличение на "__toString"

Я не уверен, что должно быть в заголовке, но код должен объяснить это лучше: class Group { private $number = 20; public function __toString() { return "$this->number"; } } $number = new Group(); echo $number, PHP_EOL; echo ++ $number, PHP_EOL; echo PHP_EOL; $number = "20"; echo $number, PHP_EOL; echo ++ $number, PHP_EOL; echo PHP_EOL; $number […]

Проверьте, существует ли свойство в магически заданных свойствах

Существует много вопросов о предмете, в частности, этот вопрос , но это мне не помогает. Существует неоднозначность между property_exists и isset поэтому, прежде чем задавать свой вопрос, я хочу указать на это: property_exists property_exists проверяет, содержит ли объект свойство без оценки его значения, он смотрит только на его видимость . Итак, в следующем примере: <?php […]