Не путайте безопасность потоков с детерминизмом. Потокобезопасный код также может быть недетерминированным. Учитывая сложность отладки проблем с многопоточным кодом, это, вероятно, нормальный случай. : -)
Безопасность потока просто гарантирует, что когда поток изменяет или читает совместно используемые данные, никакой другой поток не может получить к нему доступ таким образом, чтобы изменить данные. Если ваш код зависит от определенного порядка выполнения для правильности, то вам нужны другие механизмы синхронизации, помимо тех, которые требуются для обеспечения безопасности потока.
Я вижу, что вы специально просите о поддержке SQLite v.3, поэтому вам нужно проверить поддержку PDO
и PDO_sqlite
. Собственное расширение php_sqlite
поддерживает только SQLite v.2 в PHP с 5 по 5.2. PHP 5.3 имеет собственное расширение php_sqlite3
, но я полагаю, что это не ваш случай, поскольку оно было выпущено только вчера.
Я считаю, что вам не повезло, если ваша установка не включает это , поскольку предлагаемый PEAR MDB2 является просто уровнем абстракции над существующими драйверами, он не заменяет их.
phpinfo ();
должен сообщить вам, что скомпилировано. Выполните это:
<?php
phpinfo();
?>
и найдите sqlite в выводе HTML.
Это более общая проблема, чем просто отделение модели предметной области от доступа к данным. Та же проблема возникает, когда вы пытаетесь отделить логику приложения от модели предметной области, модель представления от логики приложения и т. Д.
Распространенным решением является метод, называемый внедрением зависимостей (DI). Некоторые люди также называют это инверсией управления (IoC).
Основополагающим текстом по этой теме была статья Мартина Фаулера Инверсия управляющих контейнеров и шаблон внедрения зависимостей , но мы прошли долгий путь с тех пор, поэтому обязательно изучите и некоторые более свежие тексты.
Вы можете реализовать DI вручную, как , описанное в этом сообщении в блоге , или вы можете позволить контейнеру DI (т.е. фреймворку) сделать работа для вас.
Общие контейнеры DI:
Если у вас нет встроенной поддержки sqllite в php, и вы не можете создать его как расширение, вы всегда можете попробовать расширение pear http://pear.php.net/ package / MDB2 .
Я сам не использовал его, но он утверждает, что поддерживает sqllite http://pear.php.net/package/MDB2_Driver_sqlite/