Friday, February 12, 2010

Как просмотреть все методы объекта php

А вот так!
<?php
$data = get_class_methods('className');

print("<pre>");
print_r($data);
print("</pre>");
?>


* This source code was highlighted with Source Code Highlighter.
Получим массив искомых методов! ;)

Просмотр свойств объекта в PHP 5

PHP 5 предоставляет механизм итераторов для получения списка всех свойств какого-либо объекта

<?php

class MyClass {
  public $var1 = 'value 1';
  public $var2 = 'value 2';
  public $var3 = 'value 3';

  protected $protected = 'protected';
  private  $private  = 'private';

}

$class = new MyClass();

foreach($class as $key => $value) {
  print "$key => $value\n";
}
?>


* This source code was highlighted with Source Code Highlighter.

Выведет

var1 => value 1
var2 => value 2
var3 => value 3


* This source code was highlighted with Source Code Highlighter.

По умолчанию, в итерации будут участвовать все свойства, объявленные как public.

Saturday, February 6, 2010

Магические Методы php

В дословном переводе — Магические Методы (Magic Methods). Эти методы зарезирвированы в php. Они начинаются с двойного подчеркивания (__).
Список всех Магических методов:

* __construct
* __destruct
* __call
* __callStatic
* __get
* __set
* __isset
* __unset
* __sleep
* __wakeup
* __toString
* __set_state
* __clone


Основные и наиболее используемые методы - это __construct, __destruct, конструктор и деструктор. С ними понятно.

Существуют также __call, __get, __set.

Эти методы связанны с перегрузкой, т.е. мы можем выполнить к примеру такой метод $object->setValue(30) даже если он фактически отсутствует. Во время выполнения управление будет отдано методу __call:
function __call($m, $a) {
    ...
}
где $m = ‘getValue’, а $a = 30.

__get и __set
выполняют похожие операции, но не с методами, а со свойствами класса.

__sleep и __wakeup
вызываются только из функций serialize и unserialize.
__sleep до выполнения команды serialize над данным объектом, она возвращает имена переменных, которые нужно сериализовать.
__wakeup в свою очередь - до выполнения команды unserialize.

__toString
При обращении к классу как к строке, PHP возвращает ошибку:
$class = new TestClass('Привет');
echo $class;
Можно для этой цели создать магический метод __toString в нужном классе.
class TestClass {
    public $foo;
    public function  __construct($foo) {
        $this->foo = $foo;
    }
    public function  __toString() {
        return $this->foo;
    }
}
__clone

Также есть метод __clone, он вызывается только при клонировании объекта с помощью оператора clone. При отсутствии этого метода, он подставится автоматически и скопирует все свойства объекта в новый. Можно самостоятельно написать метод __clone и таким образом самому определить, какие свойства будут переданы в объект-клон.