##状況
共通するHTML部分や関数を別ファイルにしてinclude や require でファイルを読み込んだ時(リファクタリング)に、別ファイル内で使っている変数に対してSymbol '$変数' is declared but not used.
という記述が出てきた。
Symbol '$変数' is declared but not used.
↓日本語訳
シンボル '$変数'が宣言されていますが、使用されていません
###原因
ユーザー定義の関数の中では変数の有効範囲はローカル関数の中となる。関数の中で使用された変数はデフォルトで有効範囲が関数内部に制限される。
PHP では、グローバル変数は、関数の内部で使用する場合、関数の内部でグローバルとして宣言する必要がある。
今回の場合、別ファイルの中で関数を定義したりして、変数のスコープが及ばなくなることが原因だと思われる。
###対処法
PHP では、グローバル変数は、関数の内部で使用する場合、関数の内部でグローバルとして宣言する必要がある。
変数の宣言
global $変数名;
// ログイン者の投稿数を取得
function 関数名(){
try{
$db = データベース接続;
$sql = "SQL文";
$res = $db->query($sql);
// 変数の宣言
global $result;
if( $res ){
$result = $res->fetchColumn();
}else{
return false;
}
}catch(Exception $e){
error_log('エラー発生:'.$e->getMessage());
}
}
スコープ
ある変数や関数などの名前(識別子)を参照できる範囲のこと。 通常、変数や関数が定義されたスコープの外側からは、それらの名前を用いるだけでは参照できない。 このときこれらの変数や関数は「スコープ外」である、あるいは「見えない」といわれる。