Пользователь пока ничего не рассказал о себе

Достижения

Все достижения (2)

Наибольший вклад в теги

Все теги (7)

Лучшие ответы пользователя

Все ответы (3)
  • Эпидемия нового вируса?

    MrShoor
    @MrShoor
    Это руткит. Вылечить можно с помощью Vba32 AntiRootkit. Сначала через эту утилиту прибиваем процесс (будет случайный набор английских символов, а адрес запуска будет в %APPDATA%. Потому в этой же утилите выбираем низкоуровневый доступ к харду, и косим экзешник. Можно еще почистить реестр в Windows/CurrrentVersion/Run. Так же не забудьте вычистить гору других экзешников с подобными случайными названиями, лежащих в %APPDATA%, но это уже можно обычными средствами.
    Ответ написан
    4 комментария
  • когда вызывать mysqli_stmt::close и mysqli_stmt::free_result?

    MrShoor
    @MrShoor Автор вопроса
    Частично сам себе ответил на вопрос. Согласно здравому смыслу, если объект mysqli_stmt будет уничтожен сборщиком мусора, то mysqli_stmt::close и mysqli_stmt::free_result должны быть вызваны в деструкторе, если в этом есть необходимость (поправьте если ошибаюсь).

    Осталось разобраться когда произойдет сборка мусора. Для этого был написан тестовый пример:
    <?php
    
    class MyClass
    {
      public $a;
      public function DoWork()
      {
        $this->a = time(); //на всякий случай чтобы запутать оптимизатор
      }
      public function __construct() 
      { 
        echo('MyClass created<br>');
      }
      public function __destruct() 
      { 
        echo('MyClass destroyed<br>');
      }  
    }
    
    function DoSomething()
    {
      $tmp = new MyClass();
      $tmp->DoWork();
      //throw new Exception('Exception');
      echo($tmp->a.'<br>'); //на всякий случай чтобы запутать оптимизатор
    }
    
    try
    {
      echo('before DoSomething<br>');
      DoSomething();
      echo('after DoSomething<br>');
    }
    catch (Exception $e)
    {
      echo($e->getMessage().'<br>');
    }
    
    ?>

    Результат выполнения кода:
    before DoSomething
    MyClass created
    1357535133
    MyClass destroyed
    after DoSomething

    Как видно из результата — чистка мусора вызывается при выходе из функции. Если раскомментировать код с исключением, то результат будет:
    before DoSomething
    MyClass created
    MyClass destroyed
    Exception

    Объект точно так же уничтожен при выходе из функции DoSomething до обработки исключения блоком catch.

    Из этого я сделал вывод (опять же не на 100% верный, но наиболее вероятный) что мой объект mysqli_stmt будет уничтожен сразу же как счетчик ссылок на него станет равным нулю, а значит вызов mysqli_stmt::free_result и mysqli_stmt::close скорее всего произойдет в деструкторе.

    А вот вопрос, нужно ли вызывать mysqli_stmt::free_result если вызывается mysqli_stmt::close — остается открытым.
    Ответ написан
    Комментировать

Лучшие вопросы пользователя

Все вопросы (2)