ФорумПрограммированиеПыхнуть хотите?Battles → PHP LINQ

PHP LINQ

  • krasun

    Сообщения: 1370 Репутация: N Группа: Джедаи

    Spritz 11 ноября 2009 г. 6:00, спустя 1 минуту 30 секунд

    мавр, я знаю, в том то и дело, дуд, так написал, вот я и задумался
    Спустя 30 сек.
    я в C#, бы сделал так (new Ling())->Method(); анонимный обьект и метод
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 11 ноября 2009 г. 6:03, спустя 3 минуты 30 секунд


    я ебу, а так можно $filtered = new Linq($src)->where('parent',10)->where('level',10)->order('date')->limit(10); ?
    Спустя 33 сек.
    в смысле new linq($src)->вызовМетодаСразуПослеКонструктора(); ?
    нет так незлья))

    о можно

    $data =Linq::create($src)-> -> -> ..
    Спустя 31 сек.
    krasun, анонимный объект не это … :)
    Сапожник без сапог
  • krasun

    Сообщения: 1370 Репутация: N Группа: Джедаи

    Spritz 11 ноября 2009 г. 6:08, спустя 4 минуты 37 секунд

    млин, спутал, только вот с чем-то похожим, не помню уже
    Спустя 94 сек.
    кажется с временным или что-то подобное =(
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 11 ноября 2009 г. 6:26, спустя 17 минут 48 секунд


    млин, спутал, только вот с чем-то похожим, не помню уже
    Спустя 94 сек.
    кажется с временным или что-то подобное =(
    просто объект безымянный)))

    лямбда - нечто вида

    new MyObject(new object{ i: 10, y:20});

    такое чтото %)
    Сапожник без сапог
  • krasun

    Сообщения: 1370 Репутация: N Группа: Джедаи

    Spritz 11 ноября 2009 г. 6:27, спустя 1 минуту 7 секунд

    сука, точно безыменный, вот а я спутал с анонимным, ведь очень похоже,

    аноним ~ что-то без имени
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 11 ноября 2009 г. 6:34, спустя 6 минут 37 секунд

    krasun, )))

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

    зы: тут синглтон по реализации (которую я вижу в голове) не подойдет, а вот фабрика например - самоето :)
    Сапожник без сапог
  • krasun

    Сообщения: 1370 Репутация: N Группа: Джедаи

    Spritz 11 ноября 2009 г. 6:59, спустя 25 минут 50 секунд

    я тоже о фабрике подумал, пока работает следующее, но это наброски, но работает


    require_once 'PEQ/Select.php';

    $names = array(
    "Alex", "Alan", "Paul",
    "Jessica", "Morgan", "Robert");

    $select = new PEQ_Select();

    /*
    * Select *
    * FROM $names
    * WHERE
    * strlen($element) > 4 AND
    * $element != "Morgan"
    *
    */
    $select->from($names)
    ->where('strlen($element) > 4')
    ->where('$element != "Morgan"');


    /*
    * Output:
    *
    * 0 => Jessica
    * 1 => Robert
    *
    */
    echo '<pre>';
    foreach ($select->result() as $key => $value)
    {
    echo "{$key} => {$value} \n";
    }
    echo '</pre>';


  • krasun

    Сообщения: 1370 Репутация: N Группа: Джедаи

    Spritz 11 ноября 2009 г. 7:09, спустя 9 минут 16 секунд

    потом будет

    $query = PEQ::select()->from($names)->where('strlen($element) > 4')->where('$element != "Morgan"');

    foreach ($query as $element) {
    ..
    }
  • adw0rd

    Сообщения: 22959 Репутация: N Группа: в ухо

    Spritz 11 ноября 2009 г. 7:27, спустя 18 минут 46 секунд

    Давайте-давайте, я потом заценю )
    https://smappi.org/ - платформа по созданию API на все случаи жизни
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 11 ноября 2009 г. 8:42, спустя 1 час 14 минут 23 секунды

    $select = new PEQ_Select();

    /*
    * Select *
    * FROM $names
    * WHERE
    * strlen($element) > 4 AND
    * $element != "Morgan"
    *
    */
    $select->from($names)

    я не понимаю почему бы не сделать

    $select = new PEQ_Select($names); ???

    это во первых, во вторых - будет гpdate, delete? ))

    Сапожник без сапог
  • krasun

    Сообщения: 1370 Репутация: N Группа: Джедаи

    Spritz 11 ноября 2009 г. 9:15, спустя 33 минуты 25 секунд

    не я думаю, выборки хватит для начала.

    хоть убей $select = new PEQ_Select($names); не могу так сделать, ибо у меня ощущения, что там должны быть названия полей, а в from откуда.

    Вот кстати, уже сделал два примера, работающих

    <?php
    function breakline()
    {
    for ($i = 0; $i < 10; $i++) {
    echo '-';
    }
    }

    require_once 'library/PEQ.php';

    /* Example 1 */

    $names = array(
    "Alex", "Alan", "Paul",
    "Jessica", "Morgan", "Robert");

    /*
    * SELECT *
    * FROM $names
    * WHERE
    * strlen($element) > 4
    *
    */
    $query = PEQ::select()->from($names)
    ->where('strlen($element) > 4');

    /*
    * Output:
    *
    * Jessica
    * Morgan
    * Robert
    *
    */
    echo '<pre>';
    foreach ($query as $value) {
    echo "{$value} \n";
    }
    echo '</pre>';

    breakline();

    /* Example 2 */

    class Customer
    {
    public $name;
    public $age;

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

    $customers = array(
    new Customer("Alex", 35), new Customer("John", 40),
    new Customer("Albert", 12), new Customer("Mabp", 25)
    );

    /*
    * SELECT *
    * FROM $customers
    * WHERE
    * $customers->age > 20 AND
    * $customers->age < 38
    */
    $query = PEQ::select()->from($customers, '$customer') // вместо $element ,
    // устанавливаем свое название, которое
    // подходит под контекст
    ->where('$customer->age > 20')
    ->where('$customer->age < 38');

    /*
    * Output:
    *
    * Alex
    * Mabp
    *
    */
    echo '<pre>';
    foreach ($query as $value) {
    echo "{$value->name} \n";
    }
    echo '</pre>';

    breakline();

    ?>
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 11 ноября 2009 г. 10:05, спустя 49 минут 50 секунд

    слушай, как думаешь?

    я за то, чтобы НЕ БЫЛО eval'ov, а ты с виду за них ибо копировал (идею реализации конечно с виду) ling4php или как там. первой библиотеки предложенной эдвордом.

    Сапожник без сапог
  • krasun

    Сообщения: 1370 Репутация: N Группа: Джедаи

    Spritz 11 ноября 2009 г. 17:15, спустя 7 часов 10 минут 18 секунд

    phpdude, какая библиотека, эдворд вроде бы ничего не предлагал?

    Не я не с eval`ом. Я делаю, так как это делают  в .NET, там основе запроса создается фильтер функция, а потом она применяется к массиву. Я тоже создаю такую функцию и применяю ее к массиву.

    Я сейчас решил, все переделать. И понял, в селект нужно передавать какое-нибудь выражание, к примеру:

    $query = PEQ::select('strtolower($customer->name), abs($customer->age)')->from($customers, '$customer') // вместо $element ,
                                                         // устанавливаем свое название, которое
                                                         // подходит под контекст
                         ->where('$customer->age > 20')
                         ->where('$customer->age < 38');
    Спустя 298 сек.
    Хотя может там и заложен механизм eval`а. И еще я  думаю все таки синтаксис должен быть неким подобием синтаксиса linq на C#, то есть не


    $query = PEQ::select('strtolower($customer->name), abs($customer->age)')->from($customers, '$customer') // вместо $element ,
                                                         // устанавливаем свое название, которое
                                                         // подходит под контекст
                         ->where('$customer->age > 20')
                         ->where('$customer->age < 38');


    а


    IEnumerable<string> query = from s in names
                                  where s.Length == 5
                                  orderby s
                                  select s.ToUpper();




    $query = from($names, '$s')->
                where('strlen($s) == 5')->
                select('strtoupper($s)');


    То есть после вызова селект уже возвращается отфильтрованный массив.

    p.s: тег java использую, так как C# не работает
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 11 ноября 2009 г. 17:16, спустя 45 секунд

    а я еще думаю :)
    Сапожник без сапог
  • krasun

    Сообщения: 1370 Репутация: N Группа: Джедаи

    Spritz 11 ноября 2009 г. 17:18, спустя 1 минуту 32 секунды

    Потому, что тот синтаксис, что я делал первый раз, больше действительно похож на SQL билдер, а в linq, все таки не много не так. Хотя что самое классное, они интегрировали это и на уровне бд, то есть эти запросы, можно выполнять сразу и с таблицами в бд.
    Спустя 37 сек.

    а я еще думаю :)


    ну я тоже думаю, просто пока думал, решил сделать наброски. еще есть 8 дней ))

Пожалуйста, авторизуйтесь, чтобы написать комментарий!