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 и таким образом самому определить, какие свойства будут переданы в объект-клон.

Sunday, November 15, 2009

Регулярные выражения в JavaScript

Регулярные выражения служат для того, чтобы иметь возможность задавать образец, с которым можно сравнивать строки. Регулярное выражение может показать, например, соответствует ли даное слово образцу. Причем, регулярные выражения (иначе, PCRE) могут сравнивать не только фиксированные символы образца и проверяемых строк. Они могут искать соответствия некоторых заранее заданных конструкций. Например, с помощью регулярных выражений можно найти все слова, ограниченные пробелами с двух сторон.

Существуют два способа задания регулярных выражений - сокращенный и формальный.


var reg = /pattern/;  //сокращенный
var reg = new RegExp("pattern"); //формальный

Tuesday, August 12, 2008

Регулярные выражения в РНР

Достаточно часто приходится работать с регулярными выражениями. В этом посте - основы, которые лучше держать в голове, но если вдруг они забудутся - то можно освежить память.
Итак.
Регулярные выражения - это усовершенствованная система шаблонов. Сначала пишется шаблон, затем с помощью одной из встроенных функций РНР он применяется к текстовой строке (регулярные выражения используются исключительно для работы со строками).
Шаблон определяется комбинацией символов, групп и классов.

Литералы
Первый тип символов, используемый для создания шаблона. Он обозначает только то, что обозначает, и не более того.
Например,шаблону «а» будет соответствовать только буква «а»,
шаблону «ab» - только «ab» и т.д.
Литералы позволяют находить точные соответствия.

Метасимволы
Более сложной структурой, чем литералы, являются метасимволы. Это специальные символы, имеющие более широкое значение. Они приведены в таблице.
(И то, чего нет в таблице, здесь "\s" - пробел)

Так, если «а» означает просто «а», то первый метасимвол, точка (.), отождествляется с любым отдельным символом (а, 1, % и т.д.).
Есть три метасимвола, позволяющие находить многочисленные соответствия:
«а*» отождествляется с нулем или любым количеством букв «а» (а, аа,ааа и т.д.);
«а+» отождествляется с одной или более «а» (а, аа, ааа и т.д., но хотя бы одна должна быть);
«а?» отождествляется с нулем или одной буквой «а».

Для поиска определенного количества одной буквы необходимо поместить в фигурные скобки диапазон ({}), указав либо конкретное число, либо минимум, либо и минимум и максимум.
Например,
«а {3}» будет соответствовать только «ааа»;
«а {3 ,}» - ааа, аааа и т.д. (три или больше букв «а»);
«а {3 , 5}» - ааа,аааа и ааааа (между тремя и пятью буквами включительно).

Знак «крышечка» ^, тот, что обычно представлен на клавиатуре над цифрой 6) будет соответствовать строке, начинающейся со следующей за знаком буквы. Этот знак можно условно представить как псевдосимвол, с которого начинается каждая строка.

Знак доллара $ отождествляется со строкой, которая заканчивается предшествующей этому символу буквой. Его также можно представить как самый последний символ в строке, обозначающий переход на новую строку.

В регулярных выражениях также используется знак вертикальной черты | как эквивалент слова «или».
Например, запись а | b будет соответствовать строкам а или b,
а запись gre | ay будет отождествляться с обоими вариантами написания названия цвета (по-английски и grey, и gray означают «серый»).

Специальные символы ". [ ] $ ( ) | * ? {} \ в шаблоне должны быть экранированы посредством поставленного перед ними обратного слеша.

Сопоставление с шаблонами
В РНР есть две встроенные функции, предназначенные специально для сопоставления с шаблоном в строке: еrеg ( ) и eregi ( ) .
Разница между ними состоит в том, что функция еrеg ( ) реагирует на регистр, a eregi () - нет, то есть не различает строчные и прописные буквы.
Значение обеих функций будет истинным, если произошло совпадение с шаблоном, и ложным в противном случае.
Ниже представлены два способа использования этих функций:

ereg("pattern", "string");
или

$Pattern = "pattern";
$String = "string";
eregi($Pattern, $String);