Здравствуйте.
При попытке создания класса data provider, реализующего получение данных из MongoDB с использованием расширения PHP pthreads возникает ошибка:
Fatal error: Uncaught Exception: Serialization of 'MongoDB\Driver\Manager' is not allowed
Код:
class dataProvider extends Threaded
{
private $db = null;
private $col = null;
private $cur = null;
private $it = null;
public function __construct($colName)
{
$this->$db = my_mongodb::getInstance();
$this->$col = $this->$db->selectCollection($colName);
$this->$cur = $this->$col->find(['etype'=>'CONTRACT'],[]);
$this->$it = new IteratorIterator($this->$cur);
$this->$it->rewind();
}
public function getNext()
{
return $this->$it->next();
}
}
В данном случае перемнная $this->$db содержит значение типа MongoDB\Driver\Manager, переменная $this->$cur содержит значение типа MongoDB\Driver\Cursor. Ошибка возникает в строке:
$this->$db = my_mongodb::getInstance();
Если же в классе "dataProvider" переменные объявить как статические, то возникает ошибка при вызове "$provider->synchronized()"
class dataProvider extends Threaded
{
private static $db = null;
private static $col = null;
private static $cur = null;
private static $it = null;
public function __construct($colName)
{
self::$db = my_mongodb::getInstance();
self::$col = self::$db->selectCollection($colName);
self::$cur = self::$col->find(['etype'=>'CONTRACT'],[]);
self::$it = new IteratorIterator(self::$cur);
self::$it->rewind();
}
public function getNext()
{
return self::$it->next();
}
}
Ошибка: Fatal error: Uncaught Error: Call to a member function next() on null в коде:
$provider->synchronized(
function($provider) use (&$value) {
$value = $provider->getNext();
},
$provider
);
Получается замкнутый круг: 1. pthreads не работает со статическими переменными 2. MongoDB\Driver\Manager не поддерживает сериализацию
Вопрос: есть ли какой-нибудь метод многопоточной работы с MongoDB\Driver\Manager через pthreads?
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Какие существуют виды рекламных бордов и как выбрать подходящий?
Подскажите, пожалуйста, конструкцию вывод страниц из базы данных в LaravelНапример, site
Вот я не понимаю, почему, когда делают какой-нибудь метод, то у него получается много вложений?