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

О проекте

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

MySQL

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

Хостинг

Другое








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

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

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

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

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

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

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

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

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

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

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

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



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





Руководство по 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