PHP serialize & JSON 解析

澳门新葡亰赌995577 1

本文由码农网 –
小峰原创翻译,转载请看清文末的转载要求,欢迎参与我们的付费投稿计划!

对于JSON(JavaScript Object
Notation)大家应该不陌生,它是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScript
Programming Language, Standard ECMA-262 3rd Edition – December
1999的一个子集。JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C,
C++, C#, Java, JavaScript, Perl,
Python等)。这些特性使JSON成为理想的数据交换语言。

本文主要总结了10个PHP特性,这些PHP特性对于PHP开发者来说都是应该学习和使用的,译文如下:

JSON建构于两种结构:

澳门新葡亰赌995577 1

“名称/值”对的集合(A collection of name/value
pairs)。不同的语言中,它被理解为对象(object),纪录(record),结构(struct),字典(dictionary),哈希表(hash
table),有键列表(keyed list),或者关联数组 (associative array)。

值的有序列表(An ordered list of
values)。在大部分语言中,它被理解为数组(array)。

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(字符串)。

PHP的serialize是将变量序列化,返回一个具有变量类型和结构的字符串表达式,
说起来两者都是以一种字符串的方式来体现一种数据结构,那它们之间有什么区别呢。

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

空接合操作符虽然小,但非常好用,是PHP7中新增加的。?? —
只要操作符的左边存在且不为空,就返回左边,否则就返回操作符的右边:

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

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

//Result: abc123

先从JSON说起,看一个简单的实例。
例一:

3)匿名类(PHP7)

PHP7中还有一个新增的也很不错,那就是匿名类。有时候,我们只是没有必要创建一个命名的类,因为它的名字会导致当前命名空间的膨胀。语法非常简单:

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

//Result: Hello!

var test = {“Name”:”Peter”,”Age”:20};
document.write(test.Name + “: ” + test.Age);

4)Reflection

Reflection是一个用来获取有关运行时代码信息的强大框架。让你可以对类、接口、函数、方法和扩展执行反向工程,以构建映射引擎,IoC容器或文档框架等等。

下面是一个获取匿名类所有方法的简单例子:

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

更多信息请看这里:

显示结果:

5)短数组初始化

在用PHP编程的时候,我倾向于大量使用数组,因为它们不仅功能强大,而且简单易用。PHP的5.4.x版本使得更容易初始化:

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

Peter: 20

6)DateTime类

PHP的5.2版本附带DateTime类作为首选的操纵和格式化日期和时间的方式。

更多信息请看这里:

变量test中{“Name”:”Peter”,”Age”:20}为一个有2个元素的对象(感觉就像PHP的数组):
Name为Peter,Age为20。

7)Lambda表达式/匿名函数

匿名函数(有时也被称为lambda表达式)是没有指定名称的函数。匿名函数可以被分配给一个变量,如下例所示:

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

$sayHi("Peter");

更多信息请看这里:

当然也可以变得复杂些。
例二:

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表达式的时候更为明显),所以要慎用于那些非常大的数组。

更多信息请看这里:

var test = {“User”:{“Name”:”Peter”,”Age”:20},”Company”:”FORD”};
document.write(test.User.Name + “: ” + test.Company);

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"}

更多信息请看这里:

显示结果:

10)密码的哈希(hashing)和验证

PHP通过password_hash和password_verify函数,用一种安全的方式来大力支持密码的哈希和验证。因为使用非常简单,所以我们就没有必要重新发明轮子了。想查看案例的话,请点击下面的文章:

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

作为PHP程序员,以上这10个PHP特性你一定要熟悉,感谢您的阅读。

Peter: FORD

这个例子中User元素中包含了Name和Age。

如果要体现多个User,则需要使用数组,区别于对象的”{}”,数组使用”[]”。
例三:

var test = [
                 {“User”:{“Name”:”Peter”,”Age”:20},”Company”:”FORD”},
                 {“User”:{“Name”:”Li Ming”,”Age”:20},”Company”:”Benz”}
              ];
document.write(test[1].User.Name + “: ” + test[1].Company);
//或者使用:document.write(test[1][“User”][澳门新葡亰赌995577,”Name”] + “: ” + test[1][“Company”]);

显示结果:

Li Ming: Benz

通过以上简单实例就能将一些复杂数据通过一个字符串来进行传递,再配合上Ajax的确是方便很多。
下面再来看看PHP的serialize函数的作用。
例四:

$arr = array
       (
          ‘Peter’=> array
          (
            ‘Country’=>’USA’,
            ‘Age’=>20
          ),
          ‘Li Ming’=> array
          (
             ‘Country’=>’CHINA’,
             ‘Age’=>21
          )
        );

$serialize_var = serialize($arr);
echo $serialize_var;

显示结果:

a:2:{s:5:”Peter”;a:2:{s:7:”Country”;s:3:”USA”;s:3:”Age”;i:20;}s:7:”Li Ming”;a:2:{s:7:”Country”;s:5:”CHINA”;s:3:”Age”;i:21;}}

发表评论

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

相关文章

网站地图xml地图