第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

PHP如何使用Decorator模式解密后使用解壓?

PHP如何使用Decorator模式解密后使用解壓?

PHP
一只斗牛犬 2023-07-15 18:33:16
出于學(xué)習(xí)目的,我嘗試創(chuàng)建一個(gè) GoF Decorator 實(shí)現(xiàn),以將文本轉(zhuǎn)換為壓縮文本或加密文本的可能性為例。    <?php    interface DataSource {        public function gerar($texto): string;        public function recuperar($texto) : string;    }    class TextoBase implements DataSource {        public function gerar($texto): string {            return $texto;        }        public function recuperar($texto) : string {            return $texto;        }    }    abstract class Decorator implements DataSource {        private DataSource $decorado;        public function __construct(DataSource $decorado) {            $this->decorado = $decorado;        }        public function gerar($texto): string {            return $this->decorado->gerar($texto);        }        public function recuperar($texto) : string {            return $this->decorado->recuperar($texto);        }    }   class CriptoDecorator extends Decorator {    const KEY = 'vDIa5JdknBqfrKOu8d7UpddnBMCH1vza';    const NONCE = 'Ra5LeH7ntW2rvkz3dmqI5Stx';    public function gerar($texto): string {        return $this->encrypt(parent::gerar($texto));    }    public function recuperar($texto): string {        return $this->decrypt(parent::recuperar($texto));    }    public function encrypt($data) {        return sodium_crypto_secretbox($data, self::NONCE, self::KEY);    }    private function decrypt(string $data): string {        return sodium_crypto_secretbox_open($data, self::NONCE, self::KEY);    }}    class CompressaoDecorator extends Decorator {        const NIVEL_COMPRESSAO = 6;        public function gerar($texto): string {            return $this->comprimir(parent::gerar($texto));        }由于某種原因,我收到警告:Warning: gzuncompress(): data error in C:\wamp64\www\curso\designer_patterns\estrutural\decorator\real_life.php on line 93那么,有沒有辦法解決這個(gè)問題并允許兩個(gè)裝飾器堆疊并用于 gerar(generate) 和 recuperar(retrieve) ?
查看完整描述

1 回答

?
白衣非少年

TA貢獻(xiàn)1155條經(jīng)驗(yàn) 獲得超0個(gè)贊

您需要按照您設(shè)置的順序展開。如果先壓縮然后加密,則需要解密然后解壓縮。


此特定代碼的快速修復(fù)方法是更改您的recuperar方法CompressaoDecorator


class CompressaoDecorator extends Decorator

{

    public function recuperar($texto): string

    {

        return parent::recuperar($this->descomprimir($texto));

    }

}

如果你想抽象地解決這個(gè)問題,我會(huì)用一個(gè)可以保證訂單的工廠來處理這個(gè)問題。為此,我認(rèn)為單個(gè)對象本身不應(yīng)該關(guān)心parent,工廠應(yīng)該完成鏈接事物的工作。


編輯


實(shí)際上,當(dāng)我更多地考慮這一點(diǎn)時(shí),您不需要工廠,您只需將所有方法的順序交換即可recuperar,因此這個(gè)也會(huì)改變:


class CriptoDecorator extends Decorator

{

    public function recuperar($texto): string

    {

        return parent::recuperar($this->decrypt($texto));

    }

}

這應(yīng)該允許您首先調(diào)用加密或壓縮,并且只要您使用相同的鏈,相反的操作也應(yīng)該起作用。


查看完整回答
反對 回復(fù) 2023-07-15
  • 1 回答
  • 0 關(guān)注
  • 146 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)