zakkiのブログ

IT関連などの雑記のブログです

一覧で表示する
Twitterで、記事の更新をお知らせします。 Twitterのフォローや拡散をよろしくお願いします。 コメントは、記事ごとのTweetまで。 https://twitter.com/zakkinoblog

クラス変数の扱いの注意事項

f:id:zakkinoblog:20210826155946j:plain

 

クラス変数をWEBでも、スタンドアローンと同様に扱うと大惨事になることがある。

 

結構重要な内容なので、WEB系のエンジニアは、この記事を、よく読んでおいたほうが無難。

 

WEBで利用するときのクラス変数は、言語ごとに扱いが違う

 

Java, Ruby

 

JavaRubyは、一般的なインスタンスとして実行されるため、クラス変数は、リクエスト間で共有される。

PHPしか、知らない人は、多分、ぞっとしたと思う。

その通りの、恐怖に感じることが起きてしまう。

 

PHPで例えると、キャッシュのような機能を果たすことになる。

 

PHPから、JavaRubyに移行するときは要注意。

 

下手すると、他人の個人情報が丸見えという現象が、たまに起こる、という、とにかく、最悪な不具合が発生してしまうことになる。

 

PHP

 

若干あいまいになってきて自信がなくなってきたのだけど、

 

PHPでは、クラス変数は、たしか、リクエスト間では共有されないはず。

(設定によっては、共有される場合があるのか、調べてもはっきりした答えは出なかったので、若干ホラーなんだけど、、、)

 

なぜなら、ローカルストレージコピーという機能によって、メモリ空間が、リクエストごとに独立しているから。

(これも、前にちらっと調べたのだけど、今「ローカルストレージコピー」で検索しても何も出てこない???。この辺は、わけがわからなくなってきている。)

 

CodeIgnitorもLaravelも、コードを追う限りでは、クラス変数にサービスコンテナを保存して、グローバルアクセスを可能にしているみたいなので、クラス変数はリクエスト間では共有されない前提で設計されているっぽい。

だから、おそらく大丈夫なはずなんだけど。

 

非常に困ったこと

 

PHPのクラス変数は、リクエスト間で共有されない前提で、使っていいのか、

だんだん、わからなくなってきたこと。

 

たしか、問題なかったはずなんだけど。

 

 

 

 

 

 

画像提供元: Pixabay