- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
public static function copyImage($params)
{
...
if (!UploadImage::getOrder($barcode, $num)) {
$num++;
return self::copyImage($filename, $code, $ext, $sync, $user_id, $num); //тут ебаная рекурсия
}
...
public static function getOrder($barcode, $num = 0)
{
if (Images::findOne(['order' => $num, 'barcode' => $barcode])){
return false;
}
return true;
}
вся эта рекурсия вместо простого...
public static function getOrder($barcode, $num = 0)
{
if (Images::findOne(['order' => $num, 'barcode' => $barcode])){
self::getOrder($barcode, $num + 1);
}
return $num;
}
Переводи на «Хаскель».
А Хуйвгонве говорил что он за пхп именно по причине отсутствия там всего этого
http://govnokod.ru/18109
Замыканий не было в PHP 5.2. Они появились 10 лет назад.
Генераторов не было в PHP 5.4. Они появились 5 лет назад.
Анонимные классы (которые можно возвращать как лямбду) появились в PHP 7.
Даже безо всего этого в «PHP» можно генерировать код на лету и скармливать его функции eval.
Плюс из коробки функции array_map, array_reduce (которые могут пробегать не только по настоящим массивам, но и по классам, реализующим интерфейс итератора; до появления замыканий они в качестве обработчика принимали имена функций) –— вот это всё.
А еще можно написать на «PHP» компилятор из 〈Haskell〉 в «PHP» и потом вызывать в "компилтайме" (кодогенерация) этот компилятор. Или даже в рантайме, генерируя код налету и сразу же его исполняя через eval
Теоретически можно всё. Да кто ж его напишет, да чтобы ещё и без багов?