PHP6. Вести с фронта.

tony2001

TeaM PHPClub
>Я тонко намекаю, что в PHP нет такой вещи, как литерал функции.
что, правда? вау.

>В большинстве скриптовых языков, начиная с любимого народом жаваскрипта, это есть
ура!
так давайте же возьмём всё, что можно из других языков, и вставим в PHP.
вот будет круто, правда?
ну, то есть не "вставим", а "вставят", сами-то мы ручки марать не будем, да и не барское это дело... мы-то, в основном, языком работать мастера.

>рассказы о том, что ни на что не похожий create_function() удобнее такой
>(более-менее) стандартной записи можно оправдать только чрезмерным PHPатриотизмом.
покажите мне этот стандарт, где написано, что каждый язык, который использует Sad Spirit, должен иметь имплементацию всего, чего его вел-во пожелает.

>Или доскональным знанием потрошков PHP, не позволяющих это реализовать.
мне смешно слышать про "потрошки" от человека, который их в глаза не видел =)

Frol
я за тебя тоже очень рад.
правда, я не знаю по какому поводу радость, но разве это важно? =)
 

Sad Spirit

мизантроп (Старожил PHPClub)
Команда форума
tony2001, на таком уровне дискуссию вести желания особого нету.
 

tony2001

TeaM PHPClub
жаль.
а я так надеялся, что мы еще выше поднимем и без того недосягаемо высокую планку уровня "потрошков".
 

diamond_krnl

pure-php
мне вот интресно а чем руководствовались когда писали такое уродство как create_function?
так понимаю всё было "на скорость", надо лямбда-функции - не беда! ща обвертку над eval-ом напишем и вуаля!
 

Андрейка

Senior pomidor developer
Rammstein
ну не деструктор сам по себе, а корректное удаление объектов по завершению работы скрипта..
некорректное - это когда объекты удаляются в некоем порядке, чаще всего совпадающем с порядком их создания (даже если порядок будет обратный лучше не станет)... при этом на объект могут быть еще ссылки, использующиеся в деструкторе другого объекта и вся эта хрень уносит пхп вместе с апачем(щас уже не уносит, но тож не легче) на тот свет. в php5 именно так и есть %)
 

Sad Spirit

мизантроп (Старожил PHPClub)
Команда форума
Автор оригинала: tony2001
жаль.
а я так надеялся, что мы еще выше поднимем и без того недосягаемо высокую планку уровня "потрошков".
tony2001, ваще-то есть небольшая разница между обсуждением отдельных недостатков языка и личными наездами типа "мы-то, в основном, языком работать мастера."

Что, ты не согласен, что в PHP вообще нет такого объекта, как "функция"? Када мы хотим передать callback, мы передаём строку или массив, а не "функцию". Более того, если проделать вот это
PHP:
$foo = create_function('$i', 'return $i > 0;');

echo gettype($foo);
то можно увидеть характерную надпись "string".

Та же ситуация и с массивами: решили не разделять массивы и словари, и теперь вроде как у нас один тип данных, зато в разделе "Array functions" описана хренова тьма функций, которые по-разному работают с массивами и словарями.

В общем PHP, в отличие от того же python'а, писался (и пишется) людьми, не имеющими понятия о дизайне языка, зато умеющими профессионально отмазываться и переводить стрелки, как ты только что всем блестяще продемонстрировал.
 

Андрейка

Senior pomidor developer
Rammstein
PHP:
  class Log {

    private $db = null;

    function __construct() {
            $this->db = fopen('c:\text22222.txt','w');
    }

    function __destruct() {
            echo "DB::DESTRUCTOR\n";
            fclose($this->db);
    }

    function query($s) {
            fwrite($this->db, $s);
    }

  }

  class A {
     private $db = null;

     function __construct(DB $db) {
             $this->db = $db;
     }

     function test() {
             $this->db->query('1234');
     }

     function __destruct() {
          echo "A::DESTRUCTOR\n";
          $this->db->query('A::finished');
     }

  }

  $log = new Log();
  $d = new A($log);
  $d->test();
----------
DB::DESTRUCTOR
A::DESTRUCTOR
Warning: fwrite(): 5 is not a valid stream resource in ... on line 17
 

Igor aka TiGR

Новичок
Что, ты не согласен, что в PHP вообще нет такого объекта, как "функция"?
Вы разговариваете на разных языках. tony2001 говорит с позиций внутреннего устройства языка, а ты - с позиций пользователя языка. Так что правы вы оба. Каждый по-своему.

Но я согласен, create_function - по крайней мере в том виде, в котором она есть сейчас - уродство. Нормальное задание анонимных и lambda функции лично для меня выглядят гораздо изящнее. Хотя бы с тех позиций, что не надо заморачиваться с экранированием в определениях функций, или с heredoc'ом.

Ввиду всего этого предпочитаю вообще не использовать анонимные функции в php. Вот если бы они были реализованы так, как это сделано во многих других языках, пользоваться ими было бы гораздо удобнее.

И, насколько я понимаю, введение таких конструкций в язык не является столь болезненным, как на это пытается намекнуть Sad Spirit.

Полагаю, у разработчиков php есть свои причины на то, почему это ещё не было реализовано, правда мне эти причины не известны.
 
Сверху