电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術(shù)文章
文章詳情頁

一文帶你吃透什么是PHP中的序列化

瀏覽:138日期:2022-06-10 16:07:47
目錄
  • 1. php 中的序列化
  • 2. 序列化和反序列化過程中的鉤子
  • 3. 如何使用序列化與外部服務(wù)通信
  • 4. 序列化實例 - Laravel Queue
  • 5. 最后

1. php 中的序列化

在 PHP 中,序列化是將數(shù)據(jù)結(jié)構(gòu)或?qū)ο筠D(zhuǎn)換為可以存儲或傳輸?shù)淖址硎镜倪^程,經(jīng)過序列化之后的對象或者數(shù)據(jù)結(jié)構(gòu),就可以保存到數(shù)據(jù)庫、緩存或通過網(wǎng)絡(luò)連接發(fā)送它,然后后面從序列化字符串重新創(chuàng)建對象或數(shù)據(jù)結(jié)構(gòu)。

以下是如何在 PHP 中序列化對象的例子:

class User
{
    public $name;
    public $email;
?
    public function __construct($name, $email)
    {
$this->name = $name;
$this->email = $email;
    }
}
?
$user = new User("John", "john@example.com");
?
$serializedUser = serialize($user);
?
echo $serializedUser;

此代碼的輸出將是$user對象的字符串表示形式,類似于:

O:4:"User":2:{s:4:"name";s:4:"John";s:5:"email";s:17:"john@example.com";}

PHP 中的序列化格式相當(dāng)簡單。序列化字符串由一系列數(shù)據(jù)類型和值組成,每個數(shù)據(jù)類型和值由冒號分隔。例如,整數(shù)的序列化字符串為i:123,而字符串的序列化字符串為s:5:"Hello"

要將此字符串反序列化回其原始形式,可以使用以下unserialize()函數(shù):

$unserializedUser = unserialize($serializedUser);
?
echo $unserializedUser->name; // John
echo $unserializedUser->email; // john@example.com

2. 序列化和反序列化過程中的鉤子

PHP 中有兩個鉤子可用于與此過程進(jìn)行交互。你可以在一個類中定義這些鉤子函數(shù),它會在你序列化或者反序列化對象的時候自動調(diào)用。這對于在序列化或取反列化對象時執(zhí)行自定義操作很有用,例如記錄或驗證。

__sleep() 鉤子:這個鉤子在序列化時被調(diào)用。在對象的屬性被序列化之前,它允許開發(fā)人員指定哪些屬性應(yīng)該被序列化,哪些屬性不被序列化。

class MyClass 
{
    private $data;
    private $secret;
?
    public function __sleep() {
return ["data"];
    }
}

__wakeup() 鉤子:這個鉤子在反序列化時被調(diào)用。在對象的屬性被反序列化之后,它允許開發(fā)人員在對象被反序列化后對其執(zhí)行任何必要的初始化或設(shè)置。

class MyClass 
{
    private $data;
    private $secret;
?
    public function __wakeup() {
$this->secret = "123456";
    }
}

3. 如何使用序列化與外部服務(wù)通信

要使用序列化與外部服務(wù)通信,可以使用 PHP 的內(nèi)置函數(shù)來發(fā)送 HTTP 請求,例如file_get_contents()curl_exec(),然后你可以將序列化數(shù)據(jù)作為請求中的參數(shù)傳遞,外部服務(wù)可以在其端反序列化數(shù)據(jù)以訪問信息。

下面是使用序列化將數(shù)據(jù)發(fā)送到外部服務(wù)的示例:

$data = [
    "name" => "John", 
    "age" => 30
];
?
// Serialize the data
$serializedData = serialize($data);
?
// Send the serialized data to the external service using HTTP POST
$ch = curl_init("http://example.com/service");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, "data=" . $serializedData);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
?
// Handle the response from the service
echo $response;

在外部服務(wù)上,您可以使用該unserialize()函數(shù)將序列化數(shù)據(jù)轉(zhuǎn)換回 PHP 數(shù)據(jù)結(jié)構(gòu)或?qū)ο蟆?/p>

// Get the serialized data from the HTTP POST request
$serializedData = $_POST["data"];
?
// Unserialize the data
$data = unserialize($serializedData);
?
// Use the data
echo "Name: " . $data["name"] . "\n";
echo "Age: " . $data["age"] . "\n";

4. 序列化實例 - Laravel Queue

當(dāng) Laravel 將 Job 類存儲到隊列服務(wù)(可以是 Redis、AWS SQS 或類似的服務(wù))中時,對象被序列化。當(dāng)你在 Laravel 中創(chuàng)建一個新的 Job 類時,它附帶了 SerializesModels 特性。

use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
?
class ExampleJob implements ShouldQueue
{
    use Dispatchable;
    use InteractsWithQueue;
    use Queueable;
    use SerializesModels;
?
    /**
     * Create a new job instance.
     *
     * @return void
     */
    public function __construct()
    {
//
    }
?
    /**
     * Execute the job.
     *
     * @return void
     */
    public function handle()
    {
//
    }
}

如果你的作業(yè)類包含對 Eloquent 模型的引用,這個特性允許你自定義序列化過程。它包含上面看到的鉤子的實現(xiàn):

namespace Illuminate\Queue;
?
trait SerializesModels
{
    use SerializesAndRestoresModelIdentifiers;
?
    /**
     * Prepare the instance for serialization.
     *
     * @return array
     */
    public function __sleep()
    {
// ...
    }
?
    /**
     * Restore the model after serialization.
     *
     * @return void
     */
    public function __wakeup()
    {
// ...
    }
?
    /**
     * Prepare the instance values for serialization.
     *
     * @return array
     */
    public function __serialize()
    {
// ...
    }
?
    /**
     * Restore the model after serialization.
     *
     * @param  array  $values
     * @return void
     */
    public function __unserialize(array $values)
    {
// ...
    }
}

如Laravel 文檔中所述:

如果你的排隊作業(yè)在其構(gòu)造函數(shù)中接受 Eloquent 模型,則只有模型的標(biāo)識符將被序列化到隊列中。當(dāng)實際處理作業(yè)時,隊列系統(tǒng)將自動從數(shù)據(jù)庫中重新檢索完整的模型實例及其加載的關(guān)系。這種模型序列化方法允許將更小的作業(yè)有效負(fù)載發(fā)送到您的隊列驅(qū)動程序。

5. 最后

serialize()并且unserialize() 是 PHP 的默認(rèn)序列化技術(shù)。事實上,其他編程語言中有許多庫允許你根據(jù) PHP 標(biāo)準(zhǔn)序列化對象和數(shù)據(jù)結(jié)構(gòu),例如 Java 中的這個庫:

除了這種特定格式,您還可以使用 JSON 標(biāo)準(zhǔn)將數(shù)據(jù)傳輸?shù)酵獠糠?wù)。PHP 通過兩個函數(shù)支持這種序列化:json_encodejson_decode

到此這篇關(guān)于一文帶你吃透什么是PHP中的序列化的文章就介紹到這了,更多相關(guān)PHP序列化內(nèi)容請搜索以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持!

標(biāo)簽: PHP
主站蜘蛛池模板: 上海网站建设-上海网站制作-上海网站设计-上海做网站公司-咏熠软件 | 超声波气象站_防爆气象站_空气质量监测站_负氧离子检测仪-风途物联网 | 东莞市海宝机械有限公司-不锈钢分选机-硅胶橡胶-生活垃圾-涡电流-静电-金属-矿石分选机 | 高中学习网-高考生信息学习必备平台 | 全自动包衣机-无菌分装隔离器-浙江迦南科技股份有限公司 | 昊宇水工|河北昊宇水工机械工程有限公司 | 上海小程序开发-小程序制作-上海小程序定制开发公司-微信商城小程序-上海咏熠 | 智能汉显全自动量热仪_微机全自动胶质层指数测定仪-鹤壁市科达仪器仪表有限公司 | 定做大型恒温循环水浴槽-工业用不锈钢恒温水箱-大容量低温恒温水槽-常州精达仪器 | 智能气瓶柜(大型气瓶储存柜)百科 | 步进驱动器「一体化」步进电机品牌厂家-一体式步进驱动 | 建筑资质代办-建筑企业资质代办机构-建筑资质代办公司 | 台式恒温摇床价格_大容量恒温摇床厂家-上海量壹科学仪器有限公司 | ★店家乐|服装销售管理软件|服装店收银系统|内衣店鞋店进销存软件|连锁店管理软件|收银软件手机版|会员管理系统-手机版,云版,App | 真空泵厂家_真空泵机组_水环泵_旋片泵_罗茨泵_耐腐蚀防爆_中德制泵 | 东莞螺杆空压机_永磁变频空压机_节能空压机_空压机工厂批发_深圳螺杆空压机_广州螺杆空压机_东莞空压机_空压机批发_东莞空压机工厂批发_东莞市文颖设备科技有限公司 | 新能源汽车电机定转子合装机 - 电机维修设备 - 睿望达 | 酒店品牌设计-酒店vi设计-酒店标识设计【国际级】VI策划公司 | 探伤仪,漆膜厚度测试仪,轮胎花纹深度尺厂家-淄博创宇电子 | HV全空气系统_杭州暖通公司—杭州斯培尔冷暖设备有限公司 | 气象监测系统_气象传感器_微型气象仪_气象环境监测仪-山东风途物联网 | 厂房出租_厂房出售_产业园区招商_工业地产 - 中工招商网 | 球磨机,节能球磨机价格,水泥球磨机厂家,粉煤灰球磨机-吉宏机械制造有限公司 | 刺绳_刀片刺网_刺丝滚笼_不锈钢刺绳生产厂家_安平县浩荣金属丝网制品有限公司-安平县浩荣金属丝网制品有限公司 | 电动打包机_气动打包机_钢带捆扎机_废纸打包机_手动捆扎机 | 杰福伦_磁致伸缩位移传感器_线性位移传感器-意大利GEFRAN杰福伦-河南赉威液压科技有限公司 | HDPE土工膜,复合土工膜,防渗膜价格,土工膜厂家-山东新路通工程材料有限公司 | COD分析仪|氨氮分析仪|总磷分析仪|总氮分析仪-圣湖Greatlake | 安规_综合测试仪,电器安全性能综合测试仪,低压母线槽安规综合测试仪-青岛合众电子有限公司 | 厦门ISO认证|厦门ISO9001认证|厦门ISO14001认证|厦门ISO45001认证-艾索咨询专注ISO认证行业 | 闪电优家-卫生间防水补漏_酒店漏水渗水维修_防水堵漏公司 | 除甲醛公司-甲醛检测-广西雅居环境科技有限公司 | 双工位钻铣攻牙机-转换工作台钻攻中心-钻铣攻牙机一体机-浙江利硕自动化设备有限公司 | 桂林腻子粉_内墙外墙抗裂砂浆腻子粉推荐广西鑫达涂料厂家供应 | 昆明挖掘机修理厂_挖掘机翻新再制造-昆明聚力工程机械维修有限公司 | 玻纤土工格栅_钢塑格栅_PP焊接_单双向塑料土工格栅_复合防裂布厂家_山东大庚工程材料科技有限公司 | 厂厂乐-汇聚海量采购信息的B2B微营销平台-厂厂乐官网 | 氧化铝球_高铝球_氧化铝研磨球-淄博誉洁陶瓷新材料有限公司 | 钢格板|镀锌钢格板|热镀锌钢格板|格栅板|钢格板|钢格栅板|热浸锌钢格板|平台钢格板|镀锌钢格栅板|热镀锌钢格栅板|平台钢格栅板|不锈钢钢格栅板 - 专业钢格板厂家 | 耐高温风管_耐高温软管_食品级软管_吸尘管_钢丝软管_卫生级软管_塑料波纹管-东莞市鑫翔宇软管有限公司 | 户外环保不锈钢垃圾桶_标识标牌制作_园林公园椅厂家_花箱定制-北京汇众环艺 |