среда, 29 июля 2009 г.

"Продвинутый" пример использования PHPLinq

Музыка: Hospital Mix.Six (Mixed By Cyantific)

Продолжая прошлую заметку посвящённую PHPLinq, решил перевести ещё и, как гласит сайт проекта, "продвинутый" пример использования PHPLinq.
Итак, вольный перевод данного материала.

Представим, что есть у нас пять яблок массив объектов Employee (служащий). А нужно нам отсортировать этот массив по имени и возрасту служащих и получить в результате массив только тех служащих, имя которых состоит из четырёх символов. И чтобы уж совсем усложнить задачу, в результате мы хотим получить не массив экземпляров класса Employee, а массив объектов, содержащих мыло и домен почтового сервера служащего. Жестоко, не правдали? ;)
Перво на перво, объявим класс служащих и заполним массив экземплярами этого класса:

class Employee {
public $Name;
public $Email;
public $Age;

public function __construct($name, $email, $age) {
$this->Name = $name;
$this->Email = $email;
$this->Age = $age;
}
}

$employees = array(
new Employee('Maarten', 'maarten@example.com', 24),
new Employee('Paul', 'paul@example.com', 30),
new Employee('Bill', 'bill.a@example.com', 29),
new Employee('Bill', 'bill.g@example.com', 28),
new Employee('Xavier', 'xavier@example.com', 40)
);

А теперь легко и не принуждённо с помощью PHPLinq брюки превращаются... превращаются... выполним, поставленную в начале, задачу:

$result = from('$employee')->in($employees)
->where('$employee => strlen($employee->Name) == 4')
->orderBy('$employee => $employee->Name')
->thenByDescending('$employee => $employee->Age')
->select('new {
"EmailAddress" => $employee->Email,
"Domain" => substr($employee->Email, strpos($employee->Email, "@") + 1)
}');

И снова, как и в предыдущем примере, вы могли заметить странный код 'new { }'. Что он делает? А он конвертируется в объект анонимного типа (класса). Например, конструкция вида new { "name" => "test" } преобразуется в объект содержащий поле "name" со значением "test".

Комментариев нет:

Отправить комментарий