Xwab
Форумыnavigate_nextПрограммирование на PHP

Магические методы в ООП
Сообщения
mastes

Обясните пожалуйста, как работают методы __autoload, __set, __get и __call. Желательно с примером. Где их можно использовать?

12 Июл 2012, 23:24
Akdmeh

Почитать документацию.

13 Июл 2012, 9:01
mastes

Akdmeh, на php.net документация переведена не полностью.

13 Июл 2012, 9:19
Akdmeh

1) чтобы быть хорошим разработчиком - английский знать надо. Не обязательно разговорный. Именно технический, для чтения документации.
http://ua2.php.net/manual/ru/language.oop5.overloading.php#object.get
кроме того, отличная, переведенная документация.

13 Июл 2012, 9:24
mastes

Давайте вернёмся к первому посту.

13 Июл 2012, 9:30
deadline404

mastes, если коротко то: автолоад вызывается при создании экземпляра не подключённого класса. Get при вызове не существующего аттрибута. Set при установке значений не существующему аттрибуту. Call при вызове не существующего метода.

Автолоад. Использовать для автозагрузки через include. Но есть более стабильная и удобная функция чем эта(через namespace).

Get, Set, Call. Использовать можно в разных ситуациях, но хорошим примером может служить домена модель(domain model), эктив рекорд (active record) и т.п
добавлено спустя 9 минут:
А лучше почитай книжек по ООП и поймёшь как и зачем использовать.

13 Июл 2012, 9:47
Анархист

mastes,__autoload-автоматическая загрузка классов.Для загрузки больших библиотеки,включая все зависимости.
Подробнее
-
[url=http://xipp.wordpress.com/2012/02/14/автоматическая-загрузка-классов-в-php-и-psr-0/]Подробнее с примерами.[/url]
добавлено спустя 3 минуты:
mastes,
Если переменная класса закрыта(private),то обращаться к ней из вне можно только через открытые методы, для того, чтобы это выглядело так будто это просто открытая переменная, к которой можно непосредственно обращаться и присваивать значения используются методы __set() и __get() класса, которые перехватывают обращения к переменной. Таким образом, можно регистрировать в объекте не существующие переменные и обращаться к ним. Контроль за этой деятельностью реализуется в методах __set() и __get().
добавлено спустя 6 минут:
пример
-
http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=21195
добавлено спустя:
mastes,__call.
При получении вызова метода, который не был определен в классе, по возможности вызывается метод __call().
добавлено спустя 3 минуты:
class ParentClass {
function __call($method, $params) {
echo "Метод $method не существует!\n";
}
}
class ChildClass extends ParentClass {
function myFunction() {
/* Логика функции */
}
}
$inst = new ChildClass();
$inst->nonExistentFunction();
Во время выполнения этого кода будет вызван метод(nonExistentFunction()), который до этого не был определён. Однако вместо того чтобы генерировать неустранимую ошибку, недействительный вызов инициирует вызов метода __call(), в результате чего у вас будет возможность исправить ошибку
добавлено спустя 39 секунд:
function __call($method, $arguments);
где $method — это строка, соответствующая вызванному методу, а $arguments — индексированный массив, содержащий параметры, передаваемые этому методу

13 Июл 2012, 22:22
mastes

Огромное спасибо

13 Июл 2012, 23:15
Ответить на тему