Я нашел, что это не проблема SQLite.
Посмотри на это
<?php class Test { protected $member; public function __construct($member = null) { $this->member = $member; $this->member->text = 'changed text'; } } class Text { public $text = 'this is text'; } $text = new Text(); $test = new Test($text); echo $text->text.PHP_EOL;
changed text
<?php class Test extends Thread // Difference { protected $member; public function __construct($member = null) { $this->member = $member; $this->member->text = 'changed text'; } } class Text { public $text = 'this is text'; } $text = new Text(); $test = new Test($text); echo $text->text.PHP_EOL;
this is text
И безопасен поток php-потоков. (Из phpinfo)
Является ли это неисправностью php?
У меня возникла проблема с потоком, использующая SQLite3in php.
код прост
<?php class Test { protected $db; public function __construct() { $this->db = new SQLite3(__DIR__.'/test.db'); echo $this->db->lastErrorCode().PHP_EOL; } } $test = new Test();
output :
0
Вышеприведенный код работает хорошо.
Но этот ниже код не работает, он просто расширяет поток
<?php class Test extends Thread { protected $db; public function __construct() { $this->db = new SQLite3(__DIR__.'/test.db'); echo $this->db->lastErrorCode().PHP_EOL; } } $test = new Test();
output :
PHP Предупреждение: SQLite3 :: lastErrorCode (): объект SQLite3 не был правильно инициализирован в /home/ordinaryparksee/Projects/human/test.php в строке 8. Предупреждение: SQLite3 :: lastErrorCode (): объект SQLite3 не имеет были правильно инициализированы в /home/ordinaryparksee/Projects/human/test.php в строке 8
Что не так??
От: https://stackoverflow.com/a/14565559/3333776
В руководстве на странице введения указано, что любой объект, который должен управляться несколькими контекстами, должен расширять Stackable, Thread или Worker, например
<?php class Test extends Thread // Difference { protected $member; public function __construct($member = null) { $this->member = $member; $this->member->text = 'changed text'; } } class Text extends Threaded // Difference2 { public $text = 'this is text'; } $text = new Text(); $test = new Test($text); echo $text->text.PHP_EOL;