• ベストアンサー

phpの変数宣言の仕方

php初心者です。 以下のように書きたいのですが出来なくて困っています。 他の関数からも$hogeを参照したいので関数testの中で宣言はしたくないです。 $hoge = 'ほげほげ'; function test() { echo $hoge; } test(); いちいちこうしないとダメなんでしょうか? $hoge = 'ほげほげ'; function test($hoge02) { echo $hoge02; } test($hoge); スマートな書き方を教えてください。 よろしくお願いしますm(_ _)m

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

  • ベストアンサー
  • sholmes
  • ベストアンサー率81% (89/109)
回答No.1

<回答> これがスマートであるかはわかりませんが、引数で渡す以外に次のような方法があるみたいです。 ・「グローバル変数群が詰まった、スーパーグローバルなハッシュ」から参照 ・globalキーワードの使用 これを使って書いた見た限りはこんな感じです。 http://ideone.com/W84ap <おまけ> ただし、どの言語を使うにせよ、変数のスコープを極力狭める方向で慣れておいた方がいいんでは・・・と個人的には思います。

参考URL:
http://php.net/manual/ja/language.variables.scope.php
from-kyoto
質問者

お礼

ありがとうございました。勉強になりました。(アホな質問ですみません…)

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (3)

  • shiren2
  • ベストアンサー率47% (139/295)
回答No.4

globalですねぇ…。 function test(){ global $hoge; echo $hoge; } それか、まるごと関数にしてしまうとか。 function hoge(){ echo "ほげほげ"; } function test(){ hoge(); } test();

from-kyoto
質問者

お礼

ありがとうございました。こんな単純なことでつまずいた自分が恥ずかしい…

全文を見る
すると、全ての回答が全文表示されます。
回答No.3

質問者はモジュール強度について学んだ方が良い。

from-kyoto
質問者

お礼

ありがとうございます、勉強します。

全文を見る
すると、全ての回答が全文表示されます。
回答No.2

関数内からグローバル変数を読み書きする方法は2つあります。 関数内で global $変数名 とする方法と、$GLOBALS['変数名'] とする方法の2つです。 例えば、 $foo = 'foo'; $bar = 'bar'; test(); function test() { global $foo; echo $foo; echo $GLOBALS['bar']; } とすることで、希望通りグローバル変数 $foo, $bar の値が出力され、"foobar"が出力されます。

from-kyoto
質問者

お礼

ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • method宣言に変数等を使って可変に宣言できるか

    method宣言時にmethod名に変数を利用して宣言する事はできるのでしょうか? ↓こんなような感じで $fuga = "test"; public function {$fuga}hoge() {  .... }

    • 締切済み
    • PHP
  • PHPにおいての関数ポインタ(リファレンス)の実装の仕方

    こんにちわ, 今PHP4.3.4を使用してWebを作成しています。 C言語で言う関数ポインタを実装したいのですが,どうすればいいのでしょうか。 たとえば, function hoge(){ return 5; } function hoge2(){ return 4; } function hoge3(){ return 3; } と宣言して function main($a, $b)[ return ($a + $b); } としたときに, main(hoge(), hoge2()); をしたときに9 main(hoge()2, hoge3()); をしたときに7 とするようにmainの関数をつくりたいのですが,どうすればいいのでしょうか。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • 関数の入れ子ができない。

     はじめまして!php初心者です。 デフォルトではfunctionの入れ子はできないのでしょうか? <? //function test test(); function test(){ echo 'good!<br />'; test1(); function test1 () { echo 'test'; } } ?> これが動きませんでした。 Fatal error*: Call to undefined function test1() in /home/*/public_html/osamu/php/test.php* on line 8 ということでした。入れ子にしたfunctionが駄目らしいです。 <? //function test test(); function test(){ echo 'Omnioo!<br />'; test1(); } function test1 () { echo 'test'; } ?> こんな風に外に出してやる動きます。 機能的に一つの関数にまとめておきたい場合、関数の中に関数がある方が便利だと思うのですが、皆様はどうされているんでしょうか? ご教授お願いします。

    • ベストアンサー
    • PHP
  • 変数の宣言をグローバルにしないと変数の参照が出来ま

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

  • PHPにおいて変数の初期化

    PHPで変数を初期化する際の初期化の方法について質問です。 私はPHPで変数を初期化するさい、視認しやすい様にsettype関数を用いることが おおいです。 単純に $hoge = array(); $foo = ""; $hoo = 1; とするより settype($hoge,"array"); とした方が、明確に 「ああ。この変数はこの行数で初めてでてきたんだな」 という具合に判断できるとおもっているからです。 例えばJSだと var hoge; という具合に、変数そのものの宣言を先んじておこなえますよね。 このように明確な変数宣言がわかりやすいとおもうのですが・・・・。 みなさまがたはPHPではどのように変数を初期化しますか? ご意見おきかせください。

    • 締切済み
    • PHP
  • PHP5での参照渡しについて

    お世話になっております。 3点質問させて下さい。 1.PHP5での参照渡しについて PHP5では、参照渡しがデフォルトという記事を読んだのですが、classを使わず、以下のようにfunctionのみで記述した場合、参照渡しになっている気配がありません。 - $test = "テスト"; function a($a){ $a = "参照渡し"; } a($test); echo $test; - 結果:テスト &$aとすると参照渡しになりますが、classを使わない場合はPHP5のデフォルトが参照渡しというのを意識する必要は無く、&を用いた参照渡しを利用する形で良いのでしょうか? 2.オブジェクトについて オブジェクト=class だと思っても良いのでしょうか? また、独立した関数では無く、classを利用した方が良い場面というのはどういう時なのでしょうか? classやオブジェクト指向というものへの私の理解が足りてない事でこのような疑問を抱く事になっていると思います。 classやPHP5のオブジェクト指向について学習するのに便利な書籍やサイトなどあれば紹介して頂けないでしょうか? 3.$_POSTや$_GETについて 他の方のソースを見ていると、何かの処理後にPOSTの値を別の変数に入れている方が多いように思えます。 私もそれにならってPOSTの値をいじる場合は、 変数 = 関数($_POST["test"]); とするようにしています。 ですが、 $_POST["test"] = 関数($_POST["test"]); とするのは何か都合が悪い事があるのでしょうか? 要領を得ない質問で申し訳ありませんが、回答頂けましたら嬉しいです。

    • ベストアンサー
    • PHP
  • phpでの局所変数

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

    • ベストアンサー
    • PHP
  • phpで関数の定義について <?php fun

    phpで関数の定義について <?php function say_hello(){ echo "hello world"."\n"; } say_hello(); echoというのはもともと関数ですよね? 関数を定義するとは、関数を新たに作るということですよね? この新たに作った、say_hello();という関数の中に echo "hello world"."\n";という関数を入れてあるということですか?

    • ベストアンサー
    • PHP
  • php + javascriptで値の保持

    現在、ラジオボタンによるデータの受け渡しを調べているのですが submitボタンを使わずに、データ遷移がしたいと思い 色々やっているのですが上手く行きません。 これは実現可能なのでしょうか? <input type="radio" name="hoge" value="1" onclick="location.href='<?php echo $_SERVER['REQUEST_URI']; ?>'; test(this.value);" <?php echo $check1; ?>> <input type="radio" name="hoge" value="2" onclick="location.href='<?php echo $_SERVER['REQUEST_URI']; ?>'; test(this.value);" <?php echo $check2; ?>> <input type="radio" name="hoge" value="3" onclick="location.href='<?php echo $_SERVER['REQUEST_URI']; ?>'; test(this.value);" <?php echo $check3; ?>> 上記のソースの様な感じでとりあえずやってみましたが、 「ボタンを押したら即移動」は可能なものの、value値の保持が javascript上でどうやったらいいか分かりません。 ※$check1~3は遷移後のchcked判定の変数です ※test関数においてのvalueを格納する処理が分かりません やはり無難にsubmitボタン+セッション関数等で構築した方が良いのでしょうか?

    • ベストアンサー
    • PHP
  • 自己参照構造体のtypedef宣言とスコープ

    MinGWとgccでプログラムを組んでいます(OSはWin7です)。 main.cpp、variable.h、function.hの3つのファイルからなり、 variable.hで自己参照構造体とそれのtypedef宣言をしています。 以下のような感じです。 ************************* typedef struct hoge HOGE; struct hoge{ int a,b; double x,y; HOGE *p1, *p2; } ************************* そのあとfunction.hでこのHOGE型のポインタを受ける関数を宣言しています。 void hogehoge(HOGE *p1, HOGE *p2); これをmain.cpp内で、variable.h、function.hの順に読み込んでいます。 そして、コンパイルエラーがでます。 error: unknown type name 'HOGE'(これがずらっと) typedefのスコープの関係なのか、それ以外の問題なのか。 煮詰まっています。アドバイスお願いいたします。m(_ _)m