Quantcast
Channel: プログラミング
Viewing all articles
Browse latest Browse all 8211

【PHP】Memcache拡張でnullをgetしたときの動作が、PHP8.xで変わっていた - ダッシュで奪取

$
0
0

はじめに

memcachedというキャッシュサーバーがあります。それをPHPから使う拡張に、Memcache拡張とMemcached拡張があります(ややこしい)。

何が違うのかなと思ったのですが、雑に言ってしまうと古いのがMemcache拡張で、新しい方はMemcached拡張のようです。この記事に書かれているのは「古いMemcache拡張の方」です。

www.php.net

www.php.net

↑こっち

動作が変わった?

PHPのバージョン差異を調べているときに気がついたのですが、キャッシュから nullをgetすると falseで返ってくるようになったみたいです。

PHP7系で動く、現時点での最新バージョン github.com

PHP8系で動く、現時点での最新バージョン github.com

Cは全然読めないのですが、 「 return_valueIS_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

おわりに

ドキュメントには(自分が確認した範囲では)書いていなかったので、ちょっと焦りました。


Viewing all articles
Browse latest Browse all 8211

Trending Articles