みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

関数定義での変数について

Perl/CGIより移行してきた者です。
この度、サブルーチン(PHPで言う関数定義)にて疑問があります。

当方、PHP5を利用しています。
Perl/CGIでは関数外で定義した変数も利用できたかと思うのですが、PHPでは利用できますか? 簡単なスクリプトでテストしたら表示されなく頭を悩ませています。

以下コードになります。
<?php
$prints ="aaa";
$printss ="bbb";

function check3(){
print "$prints";
print "$printss";
}
check3();
?>

Perl/CGIですと
$test = "aaa";
&print();
sub print {
print "$test";
}
でもばっちり表示されたかと思うのですが。

伝わりにくいかと思いますが、ご存知の方宜しくお願い致します。

投稿日時 - 2008-10-22 00:47:44

QNo.4419883

困ってます

質問者が選んだベストアンサー

Perlと違い、デフォルトで関数スコープなので、
global $prints, $printss
などの宣言が必要です。

普通の言語では、グローバル変数の利用は例外的なケースだけですね。ま、PHPも普通の言語じゃないですけど。

投稿日時 - 2008-10-22 01:31:54

お礼

グローバルという考え方を忘れていました。
思いだせました、ありがとうございます

投稿日時 - 2008-10-22 22:33:53

ANo.1

このQ&Aは役に立ちましたか?

3人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.4

すみません、
「関数外で定義した変数も利用」
を見落としていました。
申し訳ありません。

上で回答している皆様がおっしゃっているとおり、私も
「globalを使えば可能だが、classを利用していく方法をおすすめ」
させて頂いておきます。
無意味な回答となり失礼しました。

投稿日時 - 2008-10-22 15:43:27

ANo.3

<?php
$prints ="aaa";
$printss ="bbb";

function check3($prints,$printss){//ここを変更
print "$prints";
print "$printss";
}
check3($prints,$printss);//ここを変更
?>

上のように引数を指定する方法が
最も多く使うことになる方法になるかと思います。

投稿日時 - 2008-10-22 15:38:01

ANo.2

きょうびのプログラムではあまりグローバル変数はつかわなくなって
きているのでは?

・引数として渡す
・クラスのメンバー変数をつかう

のどちらかが賢明かと。
せっかくPHP5なのですから意識的にクラスを使う方がいいかも
しれませんね。

投稿日時 - 2008-10-22 12:04:34

あなたにオススメの質問