2016-09-23 2 views
1
class Test extends thread { 
    function __construct(&$db,$userObj) { 
    $this -> userObj = $userObj; 
    print "Original:"; 
    var_dump($db); 
    $this->db = $db; 
    print "InThread:"; 
    var_dump($this->db);  
    // as value of $this->db and db(in constructor) is different I am gettting different values. 
    } 
public function run(){ 
    $userId = $this->userObj->getUserId(); 
    $data = $this->db->getData(); 
// as value of $this->db and db(in constructor) is different I am getting different values. 
    } 

function getData(&$db,$userObj){ 
    $thread = new Test($db,$userObj); 
    $thread->start(); 
    } 

내 실행 기능에서 db 값을 사용하고 싶습니다. $ db 값을 변경하지 않고 run()을 통해 스레드 생성자 변수에 액세스하는 방법.실행 함수에서 스레드의 생성자 변수에 액세스하는 방법은 무엇입니까?

답변

0

자체가 Threaded이 아닌 객체 인 Threaded의 구성원 속성으로 설정된 객체는 자동으로 일련 화되고 쓰기시 자동으로 직렬화됩니다.

구성원 속성에 액세스 할 때 pthreads은 PHP (공유 없음) 구조로 인해 Threads에 의해 생성 된 개체의 반환을 금지해야합니다.

속성 자체가 Threaded 인 경우 PHP7에서 효율적으로 관리되지만 여전히 동일한 실제 개체를 가져 오지 못합니다.

$this->db$db은 다른 개체입니다.

참조로 전달하려고해도 아무런 차이가 없습니다. Threaded 개체는 구성원 속성에 대한 참조를 지원하지 않습니다.