PHP TIPS スーパーグローバル変数を静的クラスでアクセスできるようにする
独自フレームワーク『Lightnig Tone』よりコピペ
PHPのグローバル変数がよく使うわりに長くて記述するのが面倒、そして何より目障りなので、以下のように静的クラスでアクセスできるようにした。
<?php function get_array_to_static_class_code($class,$array){ $code = "class $class {"; if(is_array($array) and count($array)>0){ foreach($array as $k => $v){ $k=preg_replace('/\W/','',$k); if(preg_match("/^[a-zA-Z_]\w+$/",$k)){ if(is_array($v)){ $code.='static public $'.strtolower($k). '=array('.implode(',',array_map( create_function('$v','return "\'".addslashes($v)."\'";' ),$v)).');'; }else{ $v=addslashes($v); $code.='static public $'.strtolower($k)."='$v';"; } } } } $code.="}"; return $code;} }
<?php // スーパーグローバル変数を静的クラスでアクセスできるようにする foreach(array('server','get','post','cookie') as $v){ eval(get_array_to_static_class_code($v,${'_'.strtoupper($v)})); }
使い方
- Before
<?php if($_SERVER['REMOTE_ADDR']=='127.0.0.1' and $_GET['val']=='ok'){ echo 'ok'; }
- After
<?php if(server::$remote_addr=='127.0.0.1' and get::$val=='ok'){ echo 'ok'; }
スマートでしょ
注意事項
- Read Onlyなので、値を変更できません。とはいえ、静的クラス作成時以降に値の改変がないことが保障されているので結構使えます。
- KEY名がすべて小文字に変換されているので注意されたし
GET,POSTの配列の場合は未対応です。対応しました。いろいろ問題があるなぁ
追記
- okinakaさんよりご指摘があり、サニタイズが不十分でしたので修正しました。ご連絡ありがとうございました。