如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留链接信息。

就向json_encode和json_decode成对出现一样,配合yaml_parse出现的函数就是yaml_emit。php中yml的emit函数,有2个,分别是yaml_emit和yaml_emit_file。本篇文章中,苏南大叔以yaml_emit函数为例,来对这2个函数进行最简单说明。

string yaml_emit ( mixed $data [, int $encoding = YAML_ANY_ENCODING [, int $linebreak = YAML_ANY_BREAK [, array $callbacks = null ]]] )
bool yaml_emit_file ( string $filename , mixed $data [, int $encoding = YAML_ANY_ENCODING [, int $linebreak = YAML_ANY_BREAK [, array $callbacks = null ]]] )

基本上来说,yaml_emit_file = yaml_emit + file_put_contents。所以,我们就仅仅说明yaml_emit了。

参数 $encoding

官方说明,取值有:YAML_ANY_ENCODING, YAML_UTF8_ENCODING, YAML_UTF16LE_ENCODING, YAML_UTF16BE_ENCODING。

苏南大叔的建议取值是YAML_UTF8_ENCODING,因为这个取值的话,传递进去的中文,出来的时候还是中文。你懂的。然而,默认值不是这个值,而是YAML_ANY_ENCODING。

$obj = array(
    "slogan" => "i am 苏南"
);
var_dump(yaml_emit($obj));
var_dump(yaml_emit($obj, YAML_UTF8_ENCODING));

结果如下:

php的yaml生成(emit)函数,深度解读 - 002

php的yaml生成(emit)函数,深度解读(图3-1)

参数 $linebreak

官方取值有:YAML_ANY_BREAK, YAML_CR_BREAK, YAML_LN_BREAK, YAML_CRLN_BREAK。

主要就是生成的字符串的回车换行问题,linux和win下面不同,这是老生常谈的问题了。大家仁者见仁智者见智,自行选择一个好了。苏南大叔就不做推荐了。

$obj = array(
    "slogan" => "i am 苏南",
    "awesome" => "wonderful"
);
var_dump(yaml_emit($obj, YAML_UTF8_ENCODING));
var_dump(yaml_emit($obj, YAML_UTF8_ENCODING, YAML_CR_BREAK));
var_dump(yaml_emit($obj, YAML_UTF8_ENCODING, YAML_LN_BREAK));
var_dump(yaml_emit($obj, YAML_UTF8_ENCODING, YAML_CRLN_BREAK));

php的yaml生成(emit)函数,深度解读 - 003

php的yaml生成(emit)函数,深度解读(图3-2)

参数$callbacks

官方的独立文章说明:https://doc.php.sh/zh/yaml.callbacks.emit.html 。苏南大叔的解读就是:对于自定义的类,格式化后再输出。下面的例子中,这个自定义的类叫做EmitDemo,调用的callback是EmitDemo类的方法:yamlEmit。生成的tag!demo/emit

$obj = array(
    "slogan" => "i am 苏南"
);
class EmitDemo {
    public $data;
    public function __construct($d) {
        $this->data = $d;
    }
    public static function yamlEmit(EmitDemo $obj) {
        return array(
            'tag' => '!demo/emit',
            'data' => $obj->data,
        );
    }
}
$obj2 = [new EmitDemo(array('a', 'b', 'c')), $obj];
var_dump(yaml_emit($obj2, YAML_UTF8_ENCODING, YAML_CRLN_BREAK));
var_dump(yaml_emit($obj2, YAML_UTF8_ENCODING, YAML_CRLN_BREAK, ['EmitDemo' => array('EmitDemo', 'yamlEmit')]));

我们得到的结果如下:

php的yaml生成(emit)函数,深度解读 - 004

php的yaml生成(emit)函数,深度解读(图3-3)

这里,对于自定义类,如果我们没有设置callback的话,那么,执行的是serialize序列化。而对于设置了callback的,我们则执行的是自定义规则。

结语

yaml_emit_file是在yaml_emit基础之上,增加了个文件路径。值得注意的就是:文件路径如果有不存在的文件夹的时候,就会生成失败。所以需要 mkdir($structure, 0, true) 这个php函数来进行配合。

感谢您的阅读,欢迎关注苏南大叔的yml相关文章! https://newsn.net/tag/yml/

  【php】秘籍文章入口,仅传授于有缘之人  php    yaml

欢迎转载传播本篇原创文章,转载请保留链接及作者信息。
本站采用创作共用版权协议, 要求署名、非商业用途和相同方式共享。
转载本站内容必须也遵循“署名-非商业用途-相同方式共享”的创作共用协议。
程序如此灵动~》下所有原创文章,如被用于商业用途,请您按规定支付稿费。

苏南大叔需要你的支持

打赏任意金额,发送截图到邮箱 shang@newsn.net ,可以领取精选回馈如下(任选其一):
  • 《前端视频教程大礼包》一套
  • 《wordpress精选皮肤》一套
  • 《dedecms织梦精选模板》一套
感谢您的打赏,让我更有动力,将更多精彩教程文章,呈现给大家!谢谢!

岁月静好

关注互联网发展,关注苏南大叔的《程序如此灵动~》博客
本文章来自:程序如此灵动~
博客地址为:https://newsn.net/
原文地址为:https://newsn.net/say/php-yaml-emit.html
上一篇好文:php的yaml解析(parse)函数,深度解读
下一篇好文:你所不认识的php函数json_decode和json_encode

如果您转载了本文章,出于某种原因,并没有注明作者或者出处。
在这里,苏南大叔也表示理解和支持。因为苏南大叔深深地明白:
您会在合适的时机,合适的地方,给本博客一个外链。对吧?
您若开心,便是安好!岁月静好,但愿世界和平,没有纷争~