個人的な事情により前回の掲載から大変長い間が空いてしまいました。読者の皆様にはこの場を借りてお詫びいたします。
この2年と9ヶ月
PHP 5.3での変更点
PHP 5.
- 参照カウンタを操作するAPIの変更
- いくつかの関数/
マクロ定義の変更 - 名前空間つきクラス/
関数/ 定数のためのマクロ追加 - 名前解決のためのAPI追加
- エラーハンドリング周りの強化
- いくつかのAPIが非推奨に
また、
- 遅延静的束縛
(Late Static Bindings) やgoto文のための構造体の拡張 - コンパイラによる最適化に関する変更
- セキュリティの向上
など、
それでは、
参照カウンタを操作するAPIの変更
PHP 5.
#define ZVAL_ADDREF(pz) (++(pz)->refcount)
#define ZVAL_DELREF(pz) (--(pz)->refcount)
#define ZVAL_REFCOUNT(pz) ((pz)->refcount)
#define PZVAL_IS_REF(z) ((z)->is_ref)
#define Z_REFCOUNT_P(pz) zval_refcount_p(pz)
#define Z_SET_REFCOUNT_P(pz, rc) zval_set_refcount_p(pz, rc)
#define Z_ADDREF_P(pz) zval_addref_p(pz)
#define Z_DELREF_P(pz) zval_delref_p(pz)
#define Z_ISREF_P(pz) zval_isref_p(pz)
#define Z_SET_ISREF_P(pz) zval_set_isref_p(pz)
#define Z_UNSET_ISREF_P(pz) zval_unset_isref_p(pz)
#define Z_SET_ISREF_TO_P(pz, isref) zval_set_isref_to_p(pz, isref)
#define PZVAL_IS_REF(z) Z_ISREF_P(z)
リスト1、
この変更への対策は、
#ifndef Z_REFCOUNT_P
#define Z_REFCOUNT_P(pz) ZVAL_REFCOUNT(pz)
#define Z_SET_REFCOUNT_P(pz, rc) (pz)->refcount = (rc)
#define Z_ADDREF_P(pz) ZVAL_ADDREF(pz)
#define Z_DELREF_P(pz) ZVAL_DELREF(pz)
#define Z_ISREF_P(pz) PZVAL_IS_REF(pz)
#define Z_SET_ISREF_P(pz) (pz)->is_ref = 1
#define Z_UNSET_ISREF_P(pz) (pz)->is_ref = 0
#define Z_SET_ISREF_TO_P(pz, isref) (pz)->is_ref = (isref)
#endif
次回予告
次回も引き続き、