您好,登錄后才能下訂單哦!
今天就跟大家聊聊有關(guān)怎么在PHP中使用Volatile,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。
由于pthreads v3中引入了Threaded對(duì)象自動(dòng)不變性的概念,所以當(dāng)我們在構(gòu)造函數(shù)中給成員設(shè)置為數(shù)組時(shí),在其他地方就無法對(duì)成員再次改寫了。
例子如下:
<?php //pthreads v3引入了Threaded對(duì)象自動(dòng)不變性的概念 //如果成員被設(shè)置成Threaded對(duì)象,那么它將不能被再次改寫 //當(dāng)然,這主要還是為了性能優(yōu)化,但有時(shí)我們又需要改寫成員,那么就需要繼承自Volatile類了 class Task extends Thread { private $data; private $result; public function __construct() { $this->data = 'abc'; var_dump($this->data); //成員設(shè)置成標(biāo)量,是可以再次被改寫的 $this->data = 'def'; var_dump($this->data); //這里給data設(shè)置為數(shù)組時(shí),會(huì)自動(dòng)轉(zhuǎn)換成Volatile對(duì)象 $this->data = [1, 2, 3]; var_dump($this->data); //這個(gè)時(shí)候再給data賦值時(shí),就會(huì)報(bào)錯(cuò)了 //成員被設(shè)置成Threaded對(duì)象時(shí)(Volatile繼承自Threaded),該成員就不能再次被改寫了 $this->data = [4, 5, 6]; var_dump($this->data); //當(dāng)然,我們可以顯式的強(qiáng)制轉(zhuǎn)換,不讓Threaded幫我自動(dòng)轉(zhuǎn)成Volatile對(duì)象 $this->result = (array)[1, 2, 3]; //打印出來是數(shù)組 var_dump($this->result); $this->result = (array)[4, 5, 6]; //成員賦值成功 var_dump($this->result); } } new Task();
如果我們對(duì)成員再次進(jìn)行改寫,那么就會(huì)報(bào)錯(cuò)了。
如果確實(shí)需要對(duì)成員數(shù)據(jù)進(jìn)行改寫,除了上面的顯式強(qiáng)制轉(zhuǎn)換外,另一個(gè)方法就是繼承Volatile類了。
例子如下:
<?php //Volatile類允許其成員可更改 class Task extends Volatile { private $data; public function __construct() { //繼承自Volatile類后,我們的成員在設(shè)置成Threaded對(duì)象后,仍可改寫 $this->data = [ 'a' => 123, 'b' => 456, 'c' => 789, ]; var_dump($this->data); //這里成員數(shù)據(jù)成功被改寫 $this->data = [ 'a' => 'aaa', 'b' => 'bbb', 'c' => 'ccc', ]; var_dump($this->data); //由于Threaded對(duì)象實(shí)現(xiàn)了ArrayAccess接口,我們可以像訪問數(shù)組一樣,訪問Volatile對(duì)象 echo $this->data['a'], "\t", $this->data['b'], "\t", $this->data['c'], "\n"; foreach ($this->data as $item) { echo $item, "\n"; } } } new Task();
結(jié)果如下:
看完上述內(nèi)容,你們對(duì)怎么在PHP中使用Volatile有進(jìn)一步的了解嗎?如果還想了解更多知識(shí)或者相關(guān)內(nèi)容,請關(guān)注億速云行業(yè)資訊頻道,感謝大家的支持。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。