10个你应该学习使用的PHP特性

本文由码农网 –
小峰原创翻译,转发请看清文末的转发必要,迎接参预大家的付费投稿陈设!

PHP的serialize是将变量体系化,重临叁个有着变量类型和构造的字符串表明式,而JSON则是朝气蓬勃种更轻、更和谐的用来接口(AJAX、REST等卡塔尔数据交换的格式。
其实互相都以以生龙活虎种字符串的点子来反映生龙活虎种数据布局。那么他们中间又有啥差别呢?

因而长日子攻读JSON数组格式,于是和大户人家共享一下,看完本文你一定有众多赢得,希望本文能教会你越多东西。学习JSON数组格式时。
让我们初始那么些新定义的旅程,串行化那些话题恐怕大家此前都未曾多加关心,事情实在起点于那天作者任由翻翻PHP手册,发掘那一个串行化的函数,之后闲来无聊又做一个JSON数组格式的插件,那个时候顺便用了须臾间串行化,发现在好几场所的确十一分便利。

正文主要计算了十个PHP性情,这几个PHP性格对于PHP开拓者来讲都以应当学习和动用的,译文如下:

serialize序列化

先来分解下串行化:简单的话,串行化将在变量转变来字节流的长河。串行化的建议,有效的解决了目的的保留和传导的难点,比世尊讲,小编在JavaScript中国建工总公司立了八个对象,笔者前天想将以此目的保存到劳动器端的数据库中,那么小编怎么着开展操作呢,那时往往就用到了对象的串行化。

奥门新浦京官方网站 1

大家在部分老的WEB系统中只怕会看出在数据库或在文书文件中蕴藏着一大串貌似有着特别含义的字符串文本内容。大家紧凑看会开掘它具有数据类型和结构等音信,可是它并不易于人工阅读,它只相符PHP程序读取。PHP的serialize将数组实行了系列化并积攒。大家若是有这样三个数组:
 
$arr = array(
    “0” => array(
        “gameName” => “德乙”,
        “homeName” => “比勒费尔德”,
        “guestName” => “不伦瑞克”,
        “endTime” => “2015-08-21”
    ),
    “1” => array(
        “gameName” => “英超”,
        “homeName” => “水晶宫”,
        “guestName” => “阿斯顿维拉”,
        “endTime” => “2015-08-22”
    )
);

•怎么样更加好对JSONObject插件封装JSON对象
•怎样科学利用JSONP诉求地址加多参数表明
•漫谈Javascript Json对象的相干应用表明..
•使用JSON复杂的布局的应用表达
•通过JSON 规范与JavaScript 的关系表达..
在JavaScript的串行化中只好提JSON数组格式,JSON(JavaScript Object
Notation卡塔尔国是后生可畏种轻量级的数据沟通格式。易于人阅读和编排,同有的时候候也易于机器拆解剖判和转换。它基于JavaScript
Programming Language,JSON数组格式二个子集。
JSON采纳完全部独用立于言语的文本格式,但是也选拔了看似于C语言亲族的习于旧贯(富含C,
C++, C#, Java, JavaScript, Perl,
Python等)。那么些特点使JSON成为能够的数据调换语言。

1)标量类型声明(PHP7)

PHP是生机勃勃种松散类型的编制程序语言,由此还未有提供其余钦赐输入参数类型和再次回到值类型的情势。
PHP7通过以下语法更换了那几个情景:

function add(int $x, int $y) : int
{
    return $x + $y;
}

echo add(1, 2);

有效类型为:类/接口名称,self,array(数组),callable(回调类型),bool(布尔型),float(浮点型),int(整型)和string(字符串)。

我们要将那些数组内容存款和储蓄在数据库大概文本文件中,以便其余地方读取。
 
$serialize = serialize($arr);
echo $serialize;

•怎么着越来越好对JSONObject插件封装JSON对象
•怎样科学行使JSONP乞请地址加多参数表达
•漫谈Javascript Json对象的相干应用表明..
•使用JSON复杂的布局的采取表达
•通过JSON 标准与JavaScript 的关系表明..
人人见惯不惊将JSON和JSON数组格式举办相比,二者都以将对象扁平化(稍后大家解释这一个“扁平化”)的生龙活虎种花招,XML的特点是组织严刻,而JSON的天性则是归纳易读、轻易采纳程序进行解析,因为它能够超级粗略的将二个指标转变为一个字符流的款型,比方如下代码:

2)?? — 空切合操作符(PHP7)

空切合操作符即使小,但极度好用,是PHP7中新净增的。?? —
只要操作符的左臂存在且不为空,就回到侧面,不然就再次来到操作符的右边手:

//$a is not defined
$b = NULL;
$c = "abc123";

echo($a ?? $b ?? $c);

//Result: abc123

大家利用PHP的serialize将数组实行类别化,输出以下结果:
 
a:2:{i:0;a:4:{s:8:”gameName”;s:6:”德乙”;s:8:”homeName”;s:15:”比勒Feld”;s:9:”guestName”;s:12:”不伦瑞克”;s:7:”endTime”;s:10:”二零一五-08-21″;}i:1;a:4:{s:8:”gameName”;s:6:”英超”;s:8:”homeName”;s:9:”水晶宫足球俱乐部”;s:9:”guestName”;s:15:”阿斯顿维拉”;s:7:”endTime”;s:10:”二〇一四-08-22″;}}

1.{“type”:”human”,”name”:”hanguofeng”,”age”:22}
则是三个JSON表明式,他保存了一个对象,我们什么样将它过来为指标啊?相当的轻巧,如下:

3)匿名类(PHP7)

PHP7中还大概有多个增加产能的也非常不错,那正是无名氏类。有的时候候,大家只是未有供给创建四个命名的类,因为它的名字会造成当前命名空间的飙涨。语法比较轻松:

echo (new class() {
    public function myMethod() {
      return "Hello!";
    }
})->myMethod();

//Result: Hello!

以上输出的结果看上去相比复杂,其实也很简短,它表明的正是有的数据类型和结构。
a:2表明这是个有四个因素的数组(array);
i:0指连串索引;
a:4指有4个字段
s:8:”gameName”表达那是有8个字符的字符串(string)
事实上花费中大家只将系列化后的多寡开展仓库储存,并不要去关爱存款和储蓄的格式和甚至字段意思。尽管要将体系化后的数据复苏成数组,则应用unserialize(State of Qatar函数就可以。
 
print_r(unserialize($serialize));

1.var animal_str = ‘{“type”:”human”,”name”:”hanguofeng”,”age”:22}’; 
2.var animal2=eval(‘(‘ + animal_str + ‘卡塔尔国’卡塔尔(قطر‎; 
大家透过JavaScript的求值函数,将JSON表达式举行演算,并再次来到值,用以获得叁个对象,到这里,笔者想你料定会和自作者一样,对JSON格式的创制者的思辨佩性格很顽强在艰难险阻或巨大压力面前不屈不已呢。本来讲讲串行化的,“十分的大心”聊起JSON数组格式,而且讲了那样多,呵呵,跑题了吗?未有,PHP的串行化和JSON是相当像的,多个PHP的串行化说明式如下:
a:3:{s:4:”type”;s:5:”human”;s:4:”name”;s:10:”hanguofeng”;s:3:”age”;s:2:”20″;}

4)Reflection

Reflection是一个用来获得有关运维时期码音信的强硬框架。让您能够对类、接口、函数、方法和扩张实施反向工程,以塑造映射引擎,IoC容器或文书档案框架等等。

下面是叁个拿走无名氏类全体办法的粗略例子:

$class = new ReflectionClass(new class() {
    public function getText() {
        return "Hello from anonymous class";
    }
});
$methods = $class->getMethods();
var_dump($methods);

越多音信请看这里:

如上代码能够打字与印刷出数组。
JSON数据剖析
大家理解,PHP操作JSON能够应用json_encode()和json_decode(卡塔尔(قطر‎多少个函数。json_encode(卡塔尔能够将数组转变来json格式的公文数据,它有助于存款和储蓄和读取,而json_decode(卡塔尔(قطر‎可以一向将json数据转变成数组,方便调用。
 
$jsonencode = json_encode($arr);
echo $jsonencode;
输出:
 
[{“gameName”:”u5fb7u4e59″,”homeName”:”u6bd4u52d2u8d39u5c14u5fb7″,”guestName”:”u4e0du4f26u745eu514b”,”endTime”:”2015-08-21″},{“gameName”:”u82f1u8d85″,”homeName”:”u6c34u6676u5bab”,”guestName”:”u963fu65afu987fu7ef4u62c9″,”endTime”:”2015-08-22″}]

她看起来结会谈JSON有些看似,实际上,那几个表明式是之类数组的串行化结果:

5)短数组初叶化

在用PHP编制程序的时候,笔者趋势于大批量采取数组,因为它们不但功用强盛,何况轻便易用。PHP的5.4.x版本使得更易于初步化:

$myArray = ["foo", "name" => "bar"];

很分明,使用JSON后,数据空间要比serialize少,输出的结果中汉语字符串经过编码,留神看是键值对应,便于人工识别,並且根本是JSON格式的数目平价其余语种读取并识别,所以有些许人会说它是XML代替品。JSON格式的数额能和WEB前端JS完毕异步交互作用进度。若是要将json还原成数组,能够运用json_decode()函数。
 
print_r(json_decode($jsonencode,true));

$animal =
array
(
奥门新浦京官方网站 ,”type” => “human”,
“name” => “hanguofeng”,
“age”   => “20”
);

6)DateTime类

PHP的5.2本子附带DateTime类作为首要推荐的支配和格式化日期和时间的形式。

越来越多信息请看这里:

有关JSON的接纳有意思味的同班可以参考本站作品:PHP中JSON的应用
总结
PHP的serialize将数组系列化后是有利存款和储蓄,而JSON格式的数量不止有利存款和储蓄还是能跟别的语言如javascript读取。它们在性质上大概会有微小差异,借使前后端人机联作使用比比较多的话提议使用JSON,结合PHP、Javascript、JSON以至Ajax就足以成功强盛的数码人机联作效用。

Why

7)Lambda表达式/无名函数

无名函数(偶尔也被称呼lambda表明式)是一贯不点名名称的函数。无名函数能够被分配给贰个变量,如下例所示:

$sayHi = function($toName) {
    echo("Hi " . $toName);
};

$sayHi("Peter");

愈来愈多新闻请看这里:

串行化首先是当做数据传输的福利而现身的,正
如本文初始小编建议的难点,笔者在JavaScript中国建工业总会公司立了贰个对象,笔者前不久想将以此指标保存到服务器端的数据库中,应该如何做,那其实上是贰个“小编什么
将多个目的从浏览器提交到服务器”的标题,在此个传输进度中,大家领会,实际上只好传递字符流,字符流是黄金年代维(扁平)的,不过不菲指标却是多维的,借使要传递的靶子是二个字符串,那么很简单,我们一向将其当做传递的剧情就能够了,假若要传递的靶子是二个数组或许其余的布局吧,大家就须要用字符流来陈述他,就举个例子在机子其中,小编问你的名字是怎么着,你会报告小编,你的名字是张三、李四,而自己问你,你的长相如何呢,你就需求用文字向本人叙述了,咱们举行数量传递
的媒介往往和那条电话线路相通,只可以传递字符流,而大家叙述对象的历程,实际上就是串行化的历程。
别的,串行化也得以用来对指标的长久化存款和储蓄,可能你已经也和本人相仿,想着在数据库的某一个字段中存放四个对象,以后大家能够特不难的到位那或多或少,况兼,你的那几个数据库字段没有必要设定为极其格式,设定
为varchar就足以了(当然,若是指标非常的大,你或许供给设定为text)。
How
PHP串行化语法
好了,笔者想What和Why的难题你都打听了,本节最终大家来说点理论性强一些的剧情,正是怎么利用PHP串行化和反串行化数据,怎么样将JavaScript对象串行化(即形成JSON格式)和怎么着将其反串行化,最后则是何许将JSON和PHP的串行化构造建设关联。
PHP为我们提供了四个函数,用来进行串行化和反串行化的操作,那三个函数分别是:serialize(卡塔尔和unserialize(卡塔尔(قطر‎,他们适用于PHP4和PHP5,上边分别开展传授:
serialize()
(PHP 4, PHP 5, PECL axis2:0.1.0-0.1.1)
serialize — 获得八个可存款和储蓄的表述值
说明
string serialize ( mixed $value )
拿到一个可存款和储蓄的表述值
本函数用于无损的蕴藏或许传递PHP变量值和组织。
假使须要将曾经串行化的值转回PHP变量,能够应用unserialize(卡塔尔函数。
参数
value
即被串行化的表达式。serialize()管理除能源指针之外的持有品类,你以至足以将包括指向本人因素的数组串行化。你串行化的隐含循环指向的数组只怕指标同样会被贮存,其余的针对性则会抛弃。
当串行化对象时,PHP会尝试首先调用其成员函数__sleep(卡塔尔。那将允许对象在被串行化此前开展诸如最终的清理专业等。相近地,当使用unserialize(卡塔尔(قطر‎函数将目的苏醒时,会调用成员函数__wakeup()。
返回值
   重回多个得以被寄存在任哪处点的富含对象的字节流表明式的字符串。
unserialize()
(PHP 4, PHP 5, PECL axis2:0.1.0-0.1.1)
unserialize — 从多个已囤积的表明式中获取一个PHP变量值
说明
mixed unserialize ( string $str )
unserialize(State of Qatar获取叁个大约类型的串行化变量并将其改动回PHP变量值。
参数
str
   串行化后的字符串
固然被反串行化的变量是贰个对象,则成功复苏该对象的布局后,PHP将自动尝试推行该对象的__wakeup(State of Qatar成员函数(若是其设有)。
unserialize_callback_func
指令:你能够设定在这里进程中呗施行的回调函数,若是某些未被定义的类应当在反串行化时被实例化(以幸免获得三个不完全的指标“__PHP_Incomplete_Class”)。你能够使用php.ini,ini_set()或者.htaccess来定义
“unserialize_callback_func”。当三个未被定义的类被实例化时,它会被调用。屏蔽这些特点只需将其设为空就能够。
返回值
回来转变后的数值,恐怕是布尔变量、实数、浮点数、字符串、数组恐怕目的。
要是传入的字符串不可能被反串行化,则赶回FALSE,同一时候抛出NOTICE错误。
(以上译自PHP手册)
PHP串行化实例
数组的串行化和反串行化
OK,让我们来用实例学习一下,首先,请建构sample1.php文件,大家在这里个文件中用如下语句来创制一个哈希数组:

8)array_map

array_map是叁个精确的函数,能扶助你对数组中的每种成分试行计算。那在混合了无名函数/
lambda表明式的时候极度好用。无论你为数组中的元素提供如何措施,array_map函数都适用:

$nameLengths = array_map(function($item) {
    return strlen($item); }, ["Sue", "Peter", "Michael"]);

//Result: 3, 5, 7

急需小心的是,array_map也许会比foreach慢一点儿(极其当混合使用lambda表达式的时候尤其鲜明),所以要慎用于这一个可怜大的数组。

更加多音讯请看这里:

复制内容到剪贴板代码:
<?php
$animal =
array
(
“type” => “human”,
“name” => “hanguofeng”,
“age”   => “20”
);
?>

9)json_encode()和json_decode()

自家近日辅助于多量应用JSON体系化和反体系化。PHP的json_encode和json_decode函数对此提供了着力支持。供给注意的是,json_encode会忽视私有成员:

class car {
    public $make = "Tesla";
    public $model ="Model S";
    private $errorCodes = ['34343', '545344'];
}     
$carAsJson = json_encode(new car());

//Result: {"make":"Tesla","model":"Model S"}

更加的多信息请看这里:

为了测量试验这么些数组的值,你能够运用print_r(State of Qatar函数来输出数组,输出的结果如下:

10)密码的哈希(hashing)和表明

PHP通过password_hash和password_verify函数,用黄金时代种安全的方式来大力辅助密码的哈希和注解。因为运用特别不难,所以大家就一向不要求重新发明轮子了。想查看案例的话,请点击下边包车型客车篇章:

http://www.codeaddiction.net/articles/4/hash-and-verify-passwords-in-php—the-right-way

作为PHP程序员,以上那十多个PHP特性你早晚要熟习,多谢您的阅读。

复制内容到剪贴板代码:Array
(
[type] => human
[name] => hanguofeng
[age] => 20
)

那正是说大家将他来串行化一下,串行化的代码如下:

复制内容到剪贴板代码:<?php
$animal =
array
(
“type” => “human”,
“name” => “hanguofeng”,
“age”   => “20”
);
$animal_ser=serialize($animal);
echo($animal_ser);
?>

此处大家将数组$animal串行化,将重返的串行化字符串保存在变量$animal_ser中,并出口,输出的结果是:

复制内容到剪贴板代码:a:3:{s:4:”type”;s:5:”human”;s:4:”name”;s:10:”hanguofeng”;s:3:”age”;s:2:”20″;}

笔者们来大约对这一个字符串进行二个解析:
a:3代表那是多少个数组型的对象(a卡塔尔国,他共有多个放置的目标(3卡塔尔(قطر‎
大括号里面包车型大巴片段是以逗号分割的对象表明式列表,以s:4:”type”为例,他意味着三个字符串(s),长度为4位(4),值为“type”,即哈希数组的首先个要素的键。
末尾的局地依此类推,我们不再赘言,你能够尝试自个儿将种种对象串行化,看看串行化后的字符串是哪些构建的。
下边来看数组的反串行化,将要大家位置生成的串行化字符串苏醒为数组,代码如下:

复制内容到剪贴板代码:<?php
$animal_ser=’a:3:{s:4:”type”;s:5:”human”;s:4:”name”;s:10:”hanguofeng”;s:3:”age”;s:2:”20″;}’;
$animal = unserialize($animal_ser);
print_r($animal);
?>

在第风度翩翩行中,大家只要$animal_ser的值为地点得到的串行化字符串,在第二行将该字符串复苏为发端的数组,并赋值给$animal,最后输出$animal那些数组,这个时候的输出和本节起来时输出的原始数组是意气风发致的,即:

复制内容到剪贴板代码:Array
(
[type] => human
[name] => hanguofeng
[age] => 20
)

那般大家就做到了数组的反串行化。
开展文化—自定义对象的串行化和反串行化
对数组举办串行化是一个根基操作,可是在实际的程序设计中,大家或者时时对任何类型的变量实行串行化,比如对有些自定义对象实行串行化,这里有一个我们温馨编排的类A(保存在classa.inc中):

复制内容到剪贴板代码:<?php
class A {
var $one = 1;
function show_one() {
   echo $this->one;
}
}
?>

咱俩在如下代码中创造类的实例并对该实例进行串行化:

复制内容到剪贴板代码:<?php
include(“classa.inc”);
$a=new A;
echo(serialize($a));
?>

那个时候出口的剧情为:

复制内容到剪贴板代码:O:1:”A”:1:{s:3:”one”;i:1;}

总体来看,这些串行化字符串输出了改目的当前的情状,即i的值为1。上边我们来每种深入分析内部的细节。
O:1:由于当下的变量是七个自定义对象,因而该表征字符为“O”,表示Object。
末尾的”A”标志了该变量是哪些类的实例,这里即A类。
大括号内即该实例的逐一属性的名称和值。
以往大家将其张开反串行化:

复制内容到剪贴板代码:<?php
include(“classa.inc”);
$s = ‘O:1:”A”:1:{s:3:”one”;i:1;}’;
$a = unserialize($s);
$a->show_one();
?>

那时候出口“1”,即调用了A类的show_one()方法。
您能够当心到尽管在实例的串行化字符串中并从未富含类的情势,但是大家将其反串行化后,仍旧能够调用类的法子,这几个特点在PHP4及以上版本中被扶持(当然,你须求包蕴类的定义文件classa.inc)。
注:你能够参谋PHP手册中Language Reference->Classes and
Objects->Serializing objects – objects in sessions朝气蓬勃节的剧情。
在JavaScript中串行化为JSON—使用json2.js
JavaScript中尚无直接串行化对象的内置方法,当然你能够温和写叁个,但是自个儿依旧刚强推荐你在那地偷个小懒,使用现存的零件,JSON的官方网站www.json.org提供了对JavaScript对象完结JSON串行化的代码库—json2.js,你能够从这边得到它。
获得完成json2.js文本后,你可以展开这些文件,在文书的前有个别含有了一定大方的申明消息,若是您的Slovak语丰硕好,那么你可以省略作者那风姿罗曼蒂克节,参照他事他说加以考察该公文的批注就足以了,若是作为技师,你早已看够了大片的假名,想看看自身的方块字+字母,这你能够向下三回九转了。
总结的翻译下这些注释:
可参考
该文件创立了叁个包括五个措施的全局对象JSON,它的办法分别是:

复制内容到剪贴板代码:JSON.stringify(value, whitelist卡塔尔国

value    放肆的JavaScript值,经常是三个目的恐怕数组
whitelist    叁个可选的数组参数,用于判别对象值什么被串行化
以此办法通过三个JavaScript值来生成JSON文本。在张开串行化时,依照可选的参数whitelist,有二种大概:
假设有些对象有toJSON方法,那么则调用该办法,toJSON方法的再次来到值将被串行化。
否则,假若可选参数whitelist是三个数组,那么数组中的成分将被用来采纳对象实行串行化时的的成员。
再不,若无利用whitelist参数,则对象的持有成员将被串行化。
假定值未有JSON的展现格局,举个例子undefined恐怕函数,则其不会被串行化。在对象中,那样的值会被忽视,而在数组上将会被null替换。
JSON.stringify(undefined卡塔尔(قطر‎会再次来到undefined。日期将会被串行化为被引用的ISO日期。
例:

复制内容到剪贴板代码:var text = JSON.stringify([‘e’, {pluribus:
‘unum’}]);
//text is ‘[“e”,{“pluribus”:”unum”}]’
JSON.parse(text, filter)

该方法深入分析两个JSON文本,并扭转三个组件或然数组,其只怕抛出二个SyntaxError至极。
可选的filter参数是三个可过滤和转换结果的函数、它担任每种键和值,它的回到值用来替换源值。假使它回到所接纳的值,那么结果不会被改变。假如她重临undefined,则该成员会被删去。
例:

复制内容到剪贴板代码://剖析文本,即使有些键富含字符串“date”,则将其值调换为日期
myData = JSON.parse(text, function (key, value) {
return key.indexOf(‘date’) >= 0 ? new Date(value) : value;
});

地点的入门教程已经令你基本驾驭了json2.js的接受形式,这里关于该公文小编就不再赘言了,只是有一个小提示,假若您想大致的剖释三个JSON文本,那么能够动用eval(卡塔尔(قطر‎函数,改函数是JavaScript的放到函数,比如分析在JSON.stringify的案例中变化的JSON
文本,能够应用:

复制内容到剪贴板代码:var myE = eval(‘[“e”,{“pluribus”:”unum”}]’);

来赢得对象myE。
在JavaScript中串行化为JSON—使用prototype.js
固然您和自己雷同,合意在温馨的品种中动用开源的JavaScript框架,那么您可能能够节约使用json2.js文本了,这里以protype.js为例,该公文能够在
prototype.js中提供了对Object对象的toJSON方法,你可以行使Object.toJSON(卡塔尔(قطر‎方法来兑现对指标的串行化,比如:

复制内容到剪贴板代码:var cat=
{
name:”hellokitty”,
height:”6 apples”
}
alert(Object.toJSON(cat));
//将弹出对话框,内容为 {“name”: “hellokitty”, “height”: “6 apples”}

除此以外,在prototype.js中还会有其余的JSON协助,首假如在Ajax对象中对Ajax再次回到乞请中JSON内容的剖析。这里目前与大家的从头到尾的经过非亲非故,也不再介绍了。
PHP与JSON

上边大家一齐理解了PHP举行对象串行化的方法以至在JavaScript中开展将目的串行化为JSON的法子,你大概会质疑本人为啥将双方放在一块儿,因
为她们的语法实际是不完全生龙活虎致的,不过,在PHP中,能够对JSON文本实行反串行化,也能够将PHP的对象串行化为JSON而非PHP风格的公文。那首如果靠json_decode和json_encode五个函数来成功的,须要特意表明的是,那多个函数在PHP
5 >=
5.2.0中才被扶植,假诺你要编写运营在PHP4情状下的主次,那么那四个函数是不得以动用的。
json_decode函数
语法
mixed json_decode ( string $json [, bool $assoc] )
赢得一个JSON编码文本,并且将其更改为PHP变量
参数
json
被JSON编码的文件
assoc
当为TRUE时,再次来到的值为联合数组
返回值
回来二个指标,大概生龙活虎旦可选的assoc参数为TRUE,则二个联合数组将会被再次回到
json_encode函数
语法
string json_encode ( mixed $value )
该函数重回四个值的JSON表达式
参数
value
要被编码的值,可以为除resource外的其余项目参数
本条函数仅在UTF-8编码格式时起功能
返回值
当成功时再次回到编码后的JSON文本
json_decode函数实例
下边多个例子都根据我们的八个情景假使,即,大家有叁个客商注册的模块,这些模块以“面向对象”的措施行事,在json_decode函数实例中,大家在前
台将客商的注册音信改为叁个类的品质,而后传递到后台的php文件(这里为了便利,就无须Ajax了)。在json_encode实例中,大家在html
文件中援用三个js文件,地址指向php文件,在php文件中输出json编码后的顾客对象(雷同为了便利,我们间接生成一个对象而不从数据库中撤除息),并在html中输出。
好了,先来看前台的页面json_encode.htm,这一个页面模仿了经常的登记页面,在其上面有多少个表单,当提交
时,触发JavaScript函数,生成一个用户对象user,将表单内容设为客商对象的习性,生成JSON文本,以POST方式传递到后台的
json_encode.php文件。在js_encode.php文件中,将JSON文本用json_decode函数拆解深入分析为PHP对象,并出口。
好了,先来看json_encode.html文件,文件代码如下:

复制内容到剪贴板代码:<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0
Transitional//EN”
“;
<html xmlns=”;
<head>
<meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″
/>
<title>json_decode</title>
<script src=”json2.js” type=”text/javascript”></script>
<script type=”text/javascript”>
function JSON_test(o)
{
var user = {
       name:document.getElementById(‘txt_name’).value,
       email:document.getElementById(‘txt_email’).value,
       password:document.getElementById(‘txt_name’).value
}
var json_string = JSON.stringify(user);
document.getElementById(‘txt_json’).value=json_string;
alert(“点击鲜明后将提交表单”卡塔尔(قطر‎;
o.submit();
}
</script>
</head>
<body>
<form id=”form1″ name=”form1″ method=”post” action=”json_encode.php”
onsubmit=”JSON_test(this)”>
   <label for=”txt_name”>姓名</label>
   <p>
<input type=”text” name=”txt_name” id=”txt_name” />
   </p>
   <label for=”txt_email”>邮箱</label>
   <p>
<input type=”text” name=”txt_email” id=”txt_email” />
   </p>
   <p>
<label for=”txt_password”>密码</label>
   </p>
   <p>
<input type=”text” name=”txt_password” id=”txt_password” />
   </p>
   <p>
   <input type=”text” name=”txt_json” id=”txt_json” />
<label for=”button”></label>
<input type=”submit” name=”button” id=”button” value=”JSON” />
   </p>
</form>
</body>
</html>

当提交表单时,将触发JavaScript函数JSON_text(卡塔尔国,该函数首先创制四个JavaScript对象user,将其name、
email和password属性分别设为对应表单的值,而后使用json2.js文件的JSON.stringify方法将其退换为JSON文本
json_string,最终设定隐蔽域(这里为了让你看的敞亮,笔者把那个掩没域以文本框情势显得了)txt_json的值为json_string,并
提交表单。
下面到json_encode.php文件,如下:

复制内容到剪贴板代码:<?php
$json_string = $_POST[“txt_json”];
if(ini_get(“magic_quotes_gpc”)==”1″)
{
$json_string=stripslashes($json_string);
}
$user = json_decode($json_string);
echo var_dump($user);
?>

在这里个文件中,首先得到json_encode.html文件中POST表单域txt_json的值,放入变量$json_string中,而
后判别,若是当前PHP的设定为magic_quotes_gpc=On,即传入的双引号等会被转义,那样json_decode函数不大概深入分析,由此我们要将其反转义化。而后,使用json_decode函数将JSON文本转变为指标,保存在$user变量中,最后用echo
var_dump($user卡塔尔(قطر‎;,将该目的dump输出出来,最后结果是:

复制内容到剪贴板代码:object(stdClassState of Qatar#1 (3) {
   [“name”]=>
   string(10) “hanguofeng”
   [“email”]=>
   string(18)
“[email protected]”
   [“password”]=>
   string(10) “hanguofeng”
}

json_encode函数实例
在这里个例子
中,仍是由两部分构成的,即json_enode.html和json_encode.php。在json_decode.html文件中,基本与
json_decode.html文件的表单相像,不过分裂的是,此次我们要从json_encode.php文件中获得对应客商的JSON文本,先来看
那些PHP文件呢:

复制内容到剪贴板代码:<?php
Class user
{
public $name=””;
public $email=””;
public $password=””;
};
$myUser = new user;
$myUser->name=”hanguofeng”;
$myUser->email=”[email protected]”;
$myUser->password=”hanguofeng”;
$json_string = json_encode($myUser);
?>
var user = <?php echo($json_string)?>;

那几个文件首先创设类user,而后获得三个user类的实例myUser,并设定其客户名、邮箱和密码,接下去使用json_encode函数
将其改换为JSON文本,保存在变量$json_string中,最后输出生机勃勃段JavaScript代码,以在JavaScript中树立全局变量
user。
选择,大家需求在json_encode.html文件中引进json_encode.php文件,并获取user对象的顺序属性,如下:

复制内容到剪贴板代码:<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0
Transitional//EN”
“;
<html xmlns=”;
<head>
<meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″
/>
<title>json_encode</title>
<script src=”json_encode.php”
type=”text/javascript”></script>
</head>
<body>
<form id=”form1″ name=”form1″ method=”post”>
   <label for=”txt_name”>姓名</label>
   <p>
<input type=”text” name=”txt_name” id=”txt_name” />
   </p>
   <label for=”txt_email”>邮箱</label>
   <p>
<input type=”text” name=”txt_email” id=”txt_email” />
   </p>
   <p>
<label for=”txt_password”>密码</label>
   </p>
   <p>
<input type=”text” name=”txt_password” id=”txt_password” />
   </p>
</form>
<script type=”text/javascript” >
document.getElementById(‘txt_name’).value=user.name;
document.getElementById(‘txt_email’).value=user.email;
document.getElementById(‘txt_password’).value=user.password;
</script>
</body>
</html>

在此个文件中,你需求注意两点,第一是,大家以如此的代码引入json_encode.php文件为JavaScript文件:

复制内容到剪贴板代码:<script src=”json_encode.php”
type=”text/javascript”></script>

其次点则是:
我们在文本框代码前面插手JavaScript的代码,对文本框的value属性实行操作,分别设定其值为user对象的相应值。
施行出真知
背景表达   
前台JavaScript部分   
后台PHP部分
 

摘自  l0m0l
 

让我…

发表评论

电子邮件地址不会被公开。 必填项已用*标注