質問: 'orange'; function fruits($name) { switch($name) { case $item: echo 'これはりんごです'; break; case $item02: echo 'これはオレンジです'; break; default: echo 'これはフルーツです'; } } fruits('apple'); ``` 上記のような場合、caseに指定している変数がローカル変数となってしまうため、 グローバルで宣言したものを使用するにはどうすれば良いでしょうか? また、メソッド内で ``` function fruits($name) { global $item; global $item02; ``` と定義しなおせば出来ましたが、記述が増える為、それ以外に方法があれば教えていただきたいです。 ``` case global $item: // 処理 ``` というような事がしたいです。 よろしくお願いいたします。
回答: > > と定義しなおせば出来ましたが、記述が増える為、それ以外に方法があれば教えていただきたいです。 > > > 無いですし、グローバル変数を使うこと自体がバグの温床になるのでやめた方がいいです。 (`不必要にグローバル変数を使わない`は`記述を減らす`より優先度がかなり高い事項です。) 例えばこんな感じで引数に渡すか、 ``` // グローバルで宣言 $item[0] = 'apple'; $item[1] = 'orange'; function fruits($name,$item) { switch($name) { case $item[0]: echo 'これはりんごです'; break; case $item[1]: echo 'これはオレンジです'; break; default: echo 'これはフルーツです'; } } fruits('apple'); ``` とか、データ構造を工夫して ``` $item['apple'] = "りんご"; $item['orange'] = "オレンジ"; echo array_key_exists('apple',$item) == true ? $item['apple'] : 'fruit'; ``` とかですかね。 (記述は多いですが、前者の方が保守がしやすくバグも少なくなると思います。)