これらは私がローカルで行ったテストです:
$ php -v; echo "==="; php --re yaml | head -n 1; echo "==="; php -r 'var_dump(PHP_INT_SIZE); echo yaml_emit([0x7FFFFFFF + 1, -0x80000000 - 1]);'
PHP 7.0.0 (cli) (built: Dec 3 2015 09:31:42) ( ZTS )
Copyright (c) 1997-2015 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2015 Zend Technologies
===
Extension [ <persistent> extension #32 yaml version 2.0.0RC6 ] {
===
int(8)
---
- -2147483648
- 2147483647
...
これは、yaml_emit()すべてのコンテンツ整数を 32 ビット整数として扱うことを意味します。範囲外の場合は切り捨てられます。
同様に、これは 64 ビットの PHP バイナリにも当てはまります。
yaml_emit(0xFFFFFFFF) === yaml_emit(-1)
さらに、PECL YAML ソースによると、PHP の int はlongs として扱われるようで、64 ビット システムおよびバイナリでも、どういうわけか 32 ビットの符号付き整数になってしまいました。