П О Р Т А Л                            
С Е Т Е В Ы Х                          
П Р О Е К Т О В                        
  
Поиск по сайту:
                                                 
Главная

О проекте

Web-мастеру
     HTML & JavaScript
     SSI
     Perl
     PHP
     XML & XSLT
     Unix Shell

MySQL

Безопасность

Хостинг

Другое








Самое читаемое:

Учебник PHP - "Для Чайника".
Просмотров 5434 раз(а).

Иллюстрированный самоучитель по созданию сайтов.
Просмотров 7788 раз(а).

Учебник HTML.
Просмотров 4558 раз(а).

Руководство по PHP5.
Просмотров 1104 раз(а).

Хостинг через призму DNS.
Просмотров 6314 раз(а).

Подборка текстов стандартных документов.
Просмотров 57169 раз(а).

Учебник PHP - Самоучитель
Просмотров 4757 раз(а).

Документация на MySQL (учебник & справочное руководство)
Просмотров 10761 раз(а).

Внешние атаки...
Просмотров 6343 раз(а).

Учебник PHP.
Просмотров 3900 раз(а).

SSI в примерах.
Просмотров 917 раз(а).



 
 
| Добавить в избранное | Сделать стартовой | Помощь





Руководство по PHP
Пред. Глава 19. Классы и объекты (PHP 5) След.

Перегрузка

Вызовы методов, как и обращения к свойствам объекта, могут быть перегружены с использованием методов __call, __get и __set. Эти методы будут срабатывать только в том случае, если объект или наследуемый объект не содержат свойства или метода, к которому осуществляется доступ.

Перегрузка свойств

void __set ( string имя, mixed значение )

void __get ( mixed имя )

С помощью этих методов обращения к свойствам класса могут быть перегружены с целью выполнения произвольного кода, описанного в классе. В аргументе имя передаётся имя свойства, к которому производится обращение. Аргумент значение метода __set() должен содержать значение, которое будет присвоено свойству класса с именем имя.

Пример 19-19. Пример перегрузки с использование __get и __set

<?php
class Setter {
  
public $n;
  
private $x = array("a" => 1, "b" => 2, "c" => 3);

  function
__get($nm) {
    print
"ЧИтаем [$nm]\n";

    if (isset(
$this->x[$nm])) {
      
$r = $this->x[$nm];
      print
"Получили: $r\n";
      return
$r;
    } else {
      print
"Ничего!\n";
    }
  }

  function
__set($nm, $val) {
    print
"Пишем $val в [$nm]\n";

    if (isset(
$this->x[$nm])) {
      
$this->x[$nm] = $val;
      print
"OK!\n";
    } else {
      print
"Всё плохо!\n";
    }
  }
}

$foo = new Setter();
$foo->n = 1;
$foo->a = 100;
$foo->a++;
$foo->z++;
var_dump($foo);
?>

Результатом выполнения будет:

Пишем 100 в [a]
OK!
Читаем [a]
Получили: 100
Пишем 101 в [a]
OK!
Читаем [z]
Ничего!
Пишем 1 в [z]
Всё плохо!
object(Setter)#1 (2) {
  ["n"]=>
  int(1)
  ["x:private"]=>
  array(3) {
    ["a"]=>
    int(101)
    ["b"]=>
    int(2)
    ["c"]=>
    int(3)
  }
}

Перегрузка методов

mixed __call ( string имя, array аргументы )

С использованием этого метода, методы класса могут быть перегружены с целью выполнения произвольного кода, описанного в классе. В аргументе имя передаётся имя вызванного метода. Аргументы, которые были переданы методу при обращении, будут возвращены чере аргументы. Значение, возвращённое методом __call(), будет передано вызывающему оператору.

Пример 19-20. Пример перегрузки с использованием __call

<?php
class Caller {
  
private $x = array(1, 2, 3);

  function
__call($m, $a) {
    print
"Вызван метод $m :\n";
    
var_dump($a);
    return
$this->x;
  }
}

$foo = new Caller();
$a = $foo->test(1, "2", 3.4, true);
var_dump($a);
?>

Результатом выполнения будет:

Вызван метод test:
array(4) {
  [0]=>
  int(1)
  [1]=>
  string(1) "2"
  [2]=>
  float(3.4)
  [3]=>
  bool(true)
}
array(3) {
  [0]=>
  int(1)
  [1]=>
  int(2)
  [2]=>
  int(3)
}

Пред. Начало След.
Интерфейсы объектов Уровень выше Итераторы объектов


Если Вы не нашли что искали, то рекомендую воспользоваться поиском по сайту:
 





Copyright © 2005-2016 Project.Net.Ru