PHP超初心者です。

PHPはPerlのように変数がデフォルトでglobalではないようなので、いちいちglobal宣言やclassを使うのがめんどうです。
どなたかいい方法があれば教えてください。
お願いします。
現在は以下のように記述していますが、変数をsplitしてたくさんのグローバルな変数を作るときにとても大変そうで悩んでいます。
class hoge{
public $hogehoge = 1;
}
function aho(){
$obj = new hoge();
print $obj->hogehoge;
}
aho();

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2008/11/06 16:53:24
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:Mook No.3

回答回数1314ベストアンサー獲得回数393

ポイント45pt

コメントが無効なので、回答で失礼します。


PHP を習い始めたばかりのであれば、Global変数を使用しない書き方、

class を使うやり方を覚えたほうが良いかと思います。


多くのログラム言語で変数の有効範囲(Scope)はPHPのように

クラスや関数内で局所変数となるのが基本ですし、そのほうが都合の

良いことが多いのです。


大域変数(Global)を処理のあちこちで変更するのは一見便利そうですが、

弊害も多く、このような使い方はデバッグをしずらくし、拡張性、再利用性を

阻害する大きな原因となります。


例のケースでも、$hogehoge を puiblic にする必要性は見当たりません。

面倒でもこれに対するアクセスするメンバ関数を定義し、使用したほうが

のちのち便利だと思います。


>変数をsplitしてたくさんのグローバルな変数を作るときにとても大変そうで悩んでいます。

何のためにこのような処理をしたいかを説明し、これに対する効率的な方法の解決を図る方が

良いのではないでしょうか。


通常は多くのデータを処理するには配列を使用しますし、連想配列を利用すれば変数名を

キーとして、値を管理することは簡単にできます。

http://www.scollabo.com/banban/php/php_05.html

http://ww7.tiki.ne.jp/~inabah/php/002_006.htm

id:tyage

いちいちpublicしなくてもよかったのですか。

クラスは使ったことがないので勉強もかねてクラスを使ってやってみることにします。

分かりにくい質問なのにありがとうございました。

とても助かりました。

2008/11/06 16:50:54

その他の回答2件)

id:pahoo No.1

回答回数5960ベストアンサー獲得回数633

ポイント15pt

変数がデフォルトでglobalではない

これは言語仕様なので、どうしようもありません。


一般的に、PHP、Pealなどの関数型言語は、global変数を使わず、値渡しするのがセオリーです。


どうしても大変だということでしたら、VB.NET を使うこをお勧めします。

id:tyage

やはりそうですか。

VB.NETですか。

初めて知りました。面白そうですね。

あ、あと言うのを忘れていましたが、defineもあまり使いたくありません(わがままですいません)

2008/11/05 20:45:13
id:krese No.2

回答回数20ベストアンサー獲得回数4

ポイント20pt

$GLOBALを使うことによって、global宣言なしにグローバル変数にアクセスできます。

http://jp.php.net/manual/ja/reserved.variables.globals.php

こちらをお使いいただくと幾分楽かと思います。

id:tyage

あ、そういえばそんなものがありましたね。

でも、1個1個にGLOBALをつけるのはちょっと大変そうかなあ・・・

2008/11/06 16:48:21
id:Mook No.3

回答回数1314ベストアンサー獲得回数393ここでベストアンサー

ポイント45pt

コメントが無効なので、回答で失礼します。


PHP を習い始めたばかりのであれば、Global変数を使用しない書き方、

class を使うやり方を覚えたほうが良いかと思います。


多くのログラム言語で変数の有効範囲(Scope)はPHPのように

クラスや関数内で局所変数となるのが基本ですし、そのほうが都合の

良いことが多いのです。


大域変数(Global)を処理のあちこちで変更するのは一見便利そうですが、

弊害も多く、このような使い方はデバッグをしずらくし、拡張性、再利用性を

阻害する大きな原因となります。


例のケースでも、$hogehoge を puiblic にする必要性は見当たりません。

面倒でもこれに対するアクセスするメンバ関数を定義し、使用したほうが

のちのち便利だと思います。


>変数をsplitしてたくさんのグローバルな変数を作るときにとても大変そうで悩んでいます。

何のためにこのような処理をしたいかを説明し、これに対する効率的な方法の解決を図る方が

良いのではないでしょうか。


通常は多くのデータを処理するには配列を使用しますし、連想配列を利用すれば変数名を

キーとして、値を管理することは簡単にできます。

http://www.scollabo.com/banban/php/php_05.html

http://ww7.tiki.ne.jp/~inabah/php/002_006.htm

id:tyage

いちいちpublicしなくてもよかったのですか。

クラスは使ったことがないので勉強もかねてクラスを使ってやってみることにします。

分かりにくい質問なのにありがとうございました。

とても助かりました。

2008/11/06 16:50:54
  • id:AKIMOTO
    今ひとつ本当にされたいことがわからないのですが、上のサンプルと同じことをもっと簡単に、ということであれば、クラス変数を使うことができます。

    class Hoge {
    public static $hogehoge = 1;
    }
    function aho(){
    print Hoge::$hogehoge;
    }
    aho();

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません