はじめに
memcachedというキャッシュサーバーがあります。それをPHPから使う拡張に、Memcache拡張とMemcached拡張があります(ややこしい)。
何が違うのかなと思ったのですが、雑に言ってしまうと古いのがMemcache拡張で、新しい方はMemcached拡張のようです。この記事に書かれているのは「古いMemcache拡張の方」です。
↑こっち
動作が変わった?
PHPのバージョン差異を調べているときに気がついたのですが、キャッシュから null
をgetすると false
で返ってくるようになったみたいです。
PHP7系で動く、現時点での最新バージョン github.com
PHP8系で動く、現時点での最新バージョン github.com
Cは全然読めないのですが、 「 return_value
が IS_NULL
だったら RETURN FALSE
する」と書いてあるので多分そんな感じなんだろうなぁと思います。
動作確認してみる
動かしてみればいいじゃんということで試しました。
<?phpecho'PHP version: '.phpversion().'<br><br>'; $memcache=new Memcache; $memcache->connect('memcached', 11211)ordie('Could not connect'); $keys=['stringKey'=>'hogehoge', 'stringZeroKey'=>'', 'intKey'=>12345, 'intZeroKey'=>0, 'boolTrueKey'=>true, 'boolFalseKey'=>false, 'arrayKey'=>['red', 'green', 'blue'], 'nullKey'=>null]; // キャッシュをセットforeach($keysas$key=>$value){$memcache->set($key, $value); }// キャッシュを取得して表示foreach($keysas$key=>$value){$result=$memcache->get($key); echo"$key: "; var_dump($result); echo'<br>'; }$result=$memcache->get('notExistKey'); echo'notExistKey: '; var_dump($result); echo'<br>';
結果
PHP7.4
nullKey: NULL
PHP version: 7.4.33 stringKey: string(8) "hogehoge" stringZeroKey: string(0) "" intKey: int(12345) intZeroKey: int(0) boolTrueKey: bool(true) boolFalseKey: bool(false) arrayKey: array(3) { [0]=> string(3) "red" [1]=> string(5) "green" [2]=> string(4) "blue" } nullKey: NULL notExistKey: bool(false)
PHP8.0
nullKey: bool(false)
になっている
PHP version: 8.0.30 stringKey: string(8) "hogehoge" stringZeroKey: string(0) "" intKey: int(12345) intZeroKey: int(0) boolTrueKey: bool(true) boolFalseKey: bool(false) arrayKey: array(3) { [0]=> string(3) "red" [1]=> string(5) "green" [2]=> string(4) "blue" } nullKey: bool(false) notExistKey: bool(false)
全体は↓にあります。 github.com
おわりに
ドキュメントには(自分が確認した範囲では)書いていなかったので、ちょっと焦りました。