目录

json

本扩展实现了 » JavaScript对象符号(JSON)数据转换格式。 PHP 5 中的解码分析器基于 Douglas Crockford 的 JSON_checker。 PHP 7 中是改进的全新解析器,专门为 PHP 订制,软件许可证为 PHP license。

  • json_decode — 对 JSON 格式的字符串进行解码
  • json_encode — 对变量进行 JSON 编码
  • json_last_error_msg — Returns the error string of the last json_encode() or json_decode() call
  • json_last_error — 返回最后发生的错误

注意:json_encode的option选项可以设置JSON_UNESCAPED_UNICODE 支持正常显示中文,而不是显示unicode字符串,便于阅读。

lua

Lua是一个功能强大,速度快,轻量级,可嵌入的脚本语言。这个扩展嵌入Lua解释器,并对lua变量和函数提供面向对象的API。

扩展额外安装:https://pecl.php.net/package/lua

  • Lua::assign — 将一个php变量赋值给Lua

  • Lua::call — 调用Lua函数

  • Lua::__construct — Lua 构造方法

  • Lua::eval — 将字符串当做Lua代码执行

  • Lua::getVersion — 获取Lua版本

  • Lua::include — 解析Lua脚本文件

    返回脚本文件运行结果,参数错误返回NULL ,其它错误返回FALSE。

  • Lua::registerCallback — 向Lua中注册php函数

  • LuaClosure::__invoke — 调用luaclosure

$lua = new Lua();
$closure = $lua->eval(<<<CODE
    return (function ()
        print("hello world")
    end)
CODE
);

$lua->call($closure);
/* after PHP 5.3 */
$closure();
//输出:hello worldhello world

V8js

这个扩展将»V8 Javascript引擎嵌入到PHP中。

  • V8Js::__construct — Construct a new V8Js object
  • V8Js::executeString — Execute a string as Javascript code
  • V8Js::getExtensions — Return an array of registered extensions
  • V8Js::getPendingException — Return pending uncaught Javascript exception
  • V8Js::registerExtension — Register Javascript extensions for V8Js
$v8 = new V8Js();

/* basic.js */
$JS = <<< EOT
len = print('Hello' + ' ' + 'World!' + "\\n");
len;
EOT;

try {
var_dump($v8->executeString($JS, 'basic.js'));
} catch (V8JsException $e) {
var_dump($e);
}
Hello World!
int(13)

yaml

本扩展实现了 » YAML Ain’tMarkup Language (YAML) 数据序列化标准。

yaml数据格式:

languages:
    - Ruby
    - Perl
    - Python 
websites:
    YAML: yaml.org 
    Ruby: ruby-lang.org 
    Python: python.org 
    Perl: use.perl.org

对应的json格式:

{ 
    languages: [ 'Ruby', 'Perl', 'Python'],
    websites: {
        YAML: 'yaml.org',
        Ruby: 'ruby-lang.org',
        Python: 'python.org',
        Perl: 'use.perl.org' 
    } 
}
  • yaml_emit_file — Send the YAML representation of a value to a file
  • yaml_emit — Returns the YAML representation of a value
  • yaml_parse_file — Parse a YAML stream from a file
  • yaml_parse_url — Parse a Yaml stream from a URL
  • yaml_parse — Parse a YAML stream
$addr = array(
"given" => "Chris",
"family"=> "Dumars",
"address"=> array(
    "lines"=> "458 Walkman Dr.
    Suite #292",
    "city"=> "Royal Oak",
    "state"=> "MI",
    "postal"=> 48046,
    ),
);
$invoice = array (
    "invoice"=> 34843,
    "date"=> "2001-01-23",
    "bill-to"=> $addr,
    "ship-to"=> $addr,
    "product"=> array(
        array(
            "sku"=> "BL394D",
            "quantity"=> 4,
            "description"=> "Basketball",
            "price"=> 450,
        ),
        array(
            "sku"=> "BL4438H",
            "quantity"=> 1,
            "description"=> "Super Hoop",
            "price"=> 2392,
        ),
    ),
    "tax"=> 251.42,
    "total"=> 4443.52,
    "comments"=> "Late afternoon is best. Backup contact is Nancy Billsmer @ 338-4338.",
    );

// 把该 invoice 转换生成 YAML 的表示法
$yaml = yaml_emit($invoice);
var_dump($yaml);

// 把 YAML 转换成 PHP 变量
$parsed = yaml_parse($yaml);

// 来回转换,以检查两个结构是否相等效
var_dump($parsed == $invoice);

Yaf扩展框架

The Yet Another Framework (Yaf) 扩展是一个用来开发web应用的php框架。

http://pecl.php.net/package/yaf

http://cn2.php.net/manual/zh/yaf.tutorials.php (文档)

http://www.laruence.com/manual/preface.html (文档)

trait

trait是一个扩展,用于检测XSS代码(tainted string)。并可用于发现sql注入漏洞、shell注入漏洞等。

当启用了trait,如果传递一个traited的字符串(来自$_GET,$_POST或$_COOKIE)给一些函数,trait发出警告。

Data Structures

PHP7高效的数据结构,可以作为 array 的替代。

安装:

pecl install ds

或编译:

https://pecl.php.net/package/ds