[php]関数に変数が呼び込めない場合の対処法

詰みかけた。

症例

こういうのがあったとする。

<?php
$sample = 'aaaaa';
function hogehoge(){
    $data = $sample;
    return $data;
}

print hogehoge();

普通、これだと「aaaaa」が出力されそうなもんだけど、出ない。

これだと出る。

<?php
function hogehoge(){
    $sample = 'aaaaa';
    $data = $sample;
    return $data;
}

print hogehoge();

関数外で作成した変数はグローバルスコープ扱いになって使えるはずだけど、出ない。

phpのバージョンによるものかどうなのか。

思い返せばこういうことをしたのは初めてな気がするけどどうだったか。

とりあえず初めての症状。

呼び出し方を変えたら解決

こうしたら動いた。

<?php
$sample = 'aaaaa';
function hogehoge(){
    $data = $GLOBALS['sample'];
    return $data;
}

print hogehoge();

$GLOBALS[]で呼び出しましょう。

配列を引っ張る場合はこんな感じで書く。

$GLOBALS['sample01'][1];
$GLOBALS['sample02']['hogehoge'];

keyの書き方が同じなんで、変数部分の書き方だけ変わったという事がわかる。

もしくはこう。

<?php
$sample = 'aaaaa';
function hogehoge(){
    global $sample;
    $data = $sample;
    return $data;
}

print hogehoge();

globalで使用する変数を宣言する。これにより関数内で関数外の変数が使える。

以上。

何でか

端的に言ってjsと混同したからという話。

似てるからね、仕方ないですね。

コメント

タイトルとURLをコピーしました