• ベストアンサー

phpでの局所変数

phpで、perlでいうlocalやmyのような宣言はできないのでしょうか? function a() {  if(1){   $a=2;   print "$a<br>";  }  print "$a<br>"; } としても2が2つ表示されてしまいます。 ある関数内で場所を問わず宣言したグローバル変数でない変数のスコープは、宣言場所がどこであれ、「関数内」となるのでしょうか?

  • arcsin
  • お礼率46% (194/417)
  • PHP
  • 回答数1
  • ありがとう数1

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

  • ベストアンサー
  • moon_night
  • ベストアンサー率32% (598/1831)
回答No.1

基本的にPHPは全てローカル変数です。 グローバル変数にしたい場合は global 宣言をしてやります。 perlとはちょっと違った適用範囲っぽいですが。

参考URL:
http://search.net-newbie.com/php/language.variables.scope.html
arcsin
質問者

お礼

ありがとうございます~

関連するQ&A

  • 変数の宣言をグローバルにしないと変数の参照が出来ま

    変数の宣言をグローバルにしないと変数の参照が出来ません。 ソース全体はカプセル化のために即時関数で囲っています。 function found内で小数点第三位までで四捨五入するようにする処理が共通なので関数化したのですが、 var gramNumを外で宣言しないと参照できずにgramNumが定義されていないと出てしまい困りました 関数スコープの影響だと思い宣言を外に出したのですが、それでも定義されていないと出て、 最終的にグローバル変数にしてやっとうまくいきました。 スコープは自分より上のスコープの変数は参照できるようですが if(xGramEmptyFlag === true) {ないの式がroundの上にあるvar gramNumを参照する場合、 if分の中にある式の一つ上のスコープなので参照できると思ったのですがなぜできないのでしょうか? varはブロックスコープがないので一つ上ではなく同じスコープにあることになるのでしょうか? ただその場合も同じスコープの変数は参照できるのではないのでしょうか?

  • 変数など厳密なプログラムが書きたいのですが、どうすればよいでしょうか?

    PHPで関数の引数に渡すとき、以下のように$aaを$aとしてしまった場合に 関数内の$idは値がありませんが、関数内でこれを検出することができるのでしょうか? Perlなら use strict;とし、my等で定義されていない変数はすべて警告表示されますが、PHPはスルーです。 変数など厳密なプログラムが書きたいのですが、どうすればよいでしょうか? $aa = 1; test($a) function test($id){ ... }

    • ベストアンサー
    • PHP
  • use strictを宣言してlocal変数を使うには?

    Perl初心者です。初歩的な質問ですが、 サブルーチンの中で my だと、その下の{ } ブロックではmyで宣言したローカル変数がスコープされないので  localを使うのではないかと思いますが、 それだと、use strictではエラーになります。 こんなときどう処理したらよいのでしょうか。

    • ベストアンサー
    • Perl
  • PHPの変数の渡し方

    現在以下のような位置関係のファイルでa.phpからb.phpに変数を渡したいのですが、うまく行きません。 ├dir1 │ └a.php └dir2   └b.php a.php <?php public function a(){ $value = "test"; } ?> b.php <?php public funcition b(){ print($value); } ?> phpについてwebで調べ、a.phpで$valueをglobalにしてb.phpでは 関数内でinclude('../dir1/a.php')を記述して$GLOBALS['$value']を 使ってみたのですが、うまく値がとれませんでした。 a.phpで変数をテンプレートに設定して $smarty->Set('Value', $value); それをb.phpで取得しようとしたのですが $smarty->getTemplateVars(Value); 取得する事ができませんでした。 同じようにgeTTemplateVarsを使って別のphpでは取得出来たりするのですが、 このsmartyのスコープ?というのもわかりません。 phpScheduleItというスケジュール管理のパッケージを触っていて、 php自体初めてで深い実装が全て追えていません。 勉強不足で申し訳ないのですが、何かヒントとなる事がありましたらご教示頂けますでしょうか。 宜しくお願い致します。

    • ベストアンサー
    • PHP
  • 変数はグローバルなんですか?

    初心者です。 関数sub xxx{  $abc=10; } 関数sub yyy{  $def=$abc } というように、関数xxxで宣言した変数もPerlでは 関数yyy内で参照できるのでしょうか。つまり、同じ ファイルにあれば関数内で宣言してもグローバル 変数として使用されるのでしょうか。 (my変数は除きます)

    • ベストアンサー
    • Perl
  • 関数定義での変数について

    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"; } でもばっちり表示されたかと思うのですが。 伝わりにくいかと思いますが、ご存知の方宜しくお願い致します。

    • ベストアンサー
    • PHP
  • myの寿命

    sub mytest {  my $mytest = 0;  return \$mytest ; } $a = &mytest; print $$a; $$a++ ; print $$a; print "<br>"; $b = &mytest; print $$b; $$b++ ; print $$b; print "<br>"; print $$a; print "<br>"; 上記コードを走らせた結果、 01 01 1 と表示されました。 これは期待通りの結果なのですが、myで宣言された変数の寿命がスコープの範囲とは違っているという認識で良いのでしょうか。

    • ベストアンサー
    • Perl
  • パッケージ内のグローバル変数

    perlでいまいち理解できないことがあります。 パッケージ内にグローバル変数を作った場合、 外部のスクリプトから完全修飾名で参照できますが、 myによるグローバル変数だけ見ることができません。 レキシカルスコープとはいえ、パッケージ内では グローバル変数にしても参照できないようです。 package MyGlobalVal use vars qw($val1); # これは外部から見える our $val2; #これも外部から見える my $val3; # これは見えない この場合、$val3は外部からなんらかの方法でアクセス 可能なんでしょうか? また参照できない理由はmy宣言により、パッケージの 名前空間とは別の場所(Cだとローカル変数はスタック上に 積まれますよね)にあるから、という理解でよいのでしょうか? アドバイスなどいただけると幸いです。

    • ベストアンサー
    • Perl
  • PHP 関数内の変数のスコープについて

    宜しくお願いします。 関数A内で作成したローカル変数 「a」 を、 その関数A内で作った関数Bで、変数「a」を操作しようと思います。 簡単に書くとこうです。 function A(){ $a = array(あ、い、う); function B(){ $a = array(い、う) }   ※$aを使っての処理 } <試してみたこと> 関数B内で、global $a として、変数をグローバルにしましたが、関数Bの操作は反映されませんでした。 retun で戻せばよいとも、もちろん考えましたが、 処理の都合上、どうしてもグローバルに扱いたく思います。 とても、大雑把な質問形式で申しわけございませんが、何卒、ヒントを下さいませ。

    • ベストアンサー
    • PHP
  • Perlの変数宣言について

    PHPを毎日書いている者ですが、たまたまPerlのメールフォームをカスタマイズ しなければならなくなりました。 use strict宣言がある場合、変数はmyまたはlocalで宣言しなければいけないようですが、 サブルーチン内に sub form { ・・・ my ($form_value,$error_list) = @_; ・・・ print $error_list{'inquiry_type1'} としたところ、 Global symbol "%error_list" requires explicit package name at ・・・ と、宣言が無い場合に出るというエラーが出ました。 $error_listには、inquiry_type1は入っているはずなのですが、どのような 宣言をすればよいのでしょうか? よろしくお願いします。

    • ベストアンサー
    • Perl

専門家に質問してみよう