PHP에서 비동기식 타임 아웃을 만들려고합니다.PHP에서 pthread를 사용하여 비동기 타임 아웃을 생성
그리고 PECL 확장 pthread를 사용하여 멀티 스레딩을 할 수 있습니다.
비동기 시간 초과는 완벽하게 작동하지만 참조는 그렇지 않습니다.
이 테스트에서는 PHP 5.5.8을 사용하고 있습니다.
class ParentClass {
public $test;
public function __construct(){
}
public function test() {
echo $this->test;
}
}
class Timeout extends Thread {
private $seconds;
private $parent;
public function __construct($seconds, &$parent){
$this->seconds = $seconds;
$this->parent = $parent;
}
public function run(){
sleep($this->seconds);
$this->parent->test();
}
}
$parent = new ParentClass();
$parent->test = "Hello.\n";
$timeout = new Timeout(2, $parent);
$timeout->start();
$parent->test = "Bye.\n";
$parent->test();
Bye.
Hello.
누군가가 내가 잘못는지 말해 수 얻기
Bye.
Bye.
기대?
나는 당신에 ParentClass 실제로 내부 값이 변경 것을 몰래, 복사됩니다 있도록 스레드를 시작하면, 동일한 메모리 개체를 사용하지 않을 것을 가정해야합니다. 문서에는 힌트가 있습니다. 직렬화 가능 값만 저장할 수 있습니다. 이렇게하면 실행될 때 값이 직렬화 될 것입니다. 부모 객체를 var_dump하여 동일한 객체인지 확인하십시오. – Sven
@Sven Alright, 그래서 싱글 톤은 옵션입니까? 아니면 정적 클래스의 다른 종류? – Sem
나는 stackable가 해결책일지도 모른다고 생각하고있다. 나는 다른 리턴을 얻었으므로 같은 대상이 아니라는 것을 이미 알고있다. http://www.php.net/manual/en/class.stackable.php – Sem