coolwolf0 - Северный наблюдатель (coolwolf0) wrote,
coolwolf0 - Северный наблюдатель
coolwolf0

Categories:

Back to the USSR

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

Времена поменялись, появились нормальные компилируемые процедурные языки, объектно-ориентированные прибамбасы, редакторы с подсветкой синтаксиса, интерактивные дебаггеры, скриптовые языки...

И чем же занимается ВПС в 2020-м годе от рождества Христова? Решаем проблемы передачи параметров в функцию. Только за окном другие времена, а на экране - сраный PHP (я уже подбирал разные эпитеты к этому недо-языку). Итак, задачка состояла в том, чтобы передать в функцию пары "название параметра" + "значение параметра". Проблема оказалась в том, что получив указатель на параметр, этот недо-язык не спешит извлечь его, а тупо хранит у себя внутри. И если не приведи боже это была переменная цикла, то он радостно скопирует N раз указатель на неё же, самодовольно лыбясь обезумевшему программисту в лицо: "ну вот, что передали, то и получили".

Фрагмент кода для неслабонервных.


$bind_vars = array( "host" => $host, "ip" => $ip, "mac" => $mac );
foreach ( $bind_vars as $name => $value ) {
  oci_bind_by_name($stid, ":$name", $value);
}


Всё, хлопчики, каждый вызов oci_bind_by_name приводит к передаче всё той же переменной цикла $value по адресу.
Исправить путём создания closure эту ситуацию нельзя - $value может быть разного типа: целое, строка, дата...
Приходится ... строить стек передачи параметров! Да, вы не ослышались, я создаю массив и набиваю его в цикле фактическими параметрами. И передаю этому грёбаному PHP указатель на верхушку стека!

$bind_vars = array( "host" => $host, "ip" => $ip, "mac" => $mac );
$bind_values = array();
foreach ( $bind_vars as $name => $value ) {
  $bind_values []= $bind_vars[$name];
  $index = sizeof($bind_values)-1;
  oci_bind_by_name($stid, ":$name", $bind_values[$index]);
}


Читатели могут предложить свои варианты, но не думаю, что в этой консерватории можно что-то подправить.
И не говорите мне, что в Перле меня ждёт аналогичная засада. Не разрушайте иллюзий...
Tags: дыбр, программирование
Subscribe

  • Рецензии - сегодня только кино

    Сериалы (видео в интернете) 7-я серия " Савта бишла" Две пары: из Ирана и Курдистана. Восточная кухня во всей своей красе: много…

  • Рецензии - визуал и немного звука

    Видео в интернете Масяня идёт в ногу со временем. Во-первых, это уже давно не 100% авторская продукция, а финансируемая патреоном. Во-вторых,…

  • Рецензии - почти все жанры

    Начну с необычного Концерты Вчера были на концерте тенора Феликса Лившица, причём концерт - посвящение Валерию Ободзинскому Ободзинский, не…

  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

  • 2 comments