• ベストアンサー

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

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
  • 回答数4
  • ありがとう数4

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

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4848/10262)
回答No.1

Perlと違い、デフォルトで関数スコープなので、 global $prints, $printss などの宣言が必要です。 普通の言語では、グローバル変数の利用は例外的なケースだけですね。ま、PHPも普通の言語じゃないですけど。

WhiteWolf_
質問者

お礼

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

その他の回答 (3)

  • altrn
  • ベストアンサー率62% (10/16)
回答No.4

すみません、 「関数外で定義した変数も利用」 を見落としていました。 申し訳ありません。 上で回答している皆様がおっしゃっているとおり、私も 「globalを使えば可能だが、classを利用していく方法をおすすめ」 させて頂いておきます。 無意味な回答となり失礼しました。

  • altrn
  • ベストアンサー率62% (10/16)
回答No.3

<?php $prints ="aaa"; $printss ="bbb"; function check3($prints,$printss){//ここを変更 print "$prints"; print "$printss"; } check3($prints,$printss);//ここを変更 ?> 上のように引数を指定する方法が 最も多く使うことになる方法になるかと思います。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

きょうびのプログラムではあまりグローバル変数はつかわなくなって きているのでは? ・引数として渡す ・クラスのメンバー変数をつかう のどちらかが賢明かと。 せっかくPHP5なのですから意識的にクラスを使う方がいいかも しれませんね。

関連するQ&A

  • 自分で定義した関数をすぐに使いたい

    自分で定義した関数を最初から実装されているabs()やsqrt()のように何もせず(呼び出さずに)使用することはできないのでしょうか。 現在,"C://Perl/function/~.pl"といったようにfunctionという名前のフォルダに自分で作成した関数を保存しています。そしてその関数を使うときには, require("C://Perl/function/var.pl") &パッケージ名::サブルーチン名(引数); などとして使用していますが,呼び出す関数が1つ2つなら良いですが統計学に関する関数がないためほとんど自分で定義したものをつかっています。そうすると使用したい関数が多くなるほど,呼び出す手間が多くなってしまうのですが何か良い手段はないものでしょうか(モジュールを作成してもそれほど手間が省けるようにも思えないのですが、、、)。

    • ベストアンサー
    • Perl
  • 変数など厳密なプログラムが書きたいのですが、どうすればよいでしょうか?

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

    • ベストアンサー
    • PHP
  • PHPで定義されている関数のコードが見たい

    PHPでコードを記述するとき、関数を定義することがあります。 function test($name){ : : } しかし、最初から定義されている関数がありますよね。 isset()やfile_get_contents()などの関数です。 こういった関数の中身をみたいのですが、PHPのどの部分を見ればいいのでしょうか。 関数の中身とは、たとえばfile_get_contentsなら function file_get_contents($name){ : //この部分のことです。 : } PEARだったら、たとえばDB.phpならばDB,phpの中身を見ればいいのですが、fopen()などの最初から定義されている関数はどこを見れいいのかがわかりません。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • 未定義関数のチェック

    あるCGIゲームを改造中に、エラー(500などではない)が発生したようで、 どうやら未定義関数が原因であると言うことを他の方に聞きました。 しかし、PERLチェッカーでもエラーにならないので、チェックができないのですが、チェックする方法はありますでしょうか? 解答をお願いします。

    • ベストアンサー
    • Perl
  • phpコードの戻り値をhtmlファイルに入れるには

    こんばんは。 質問は.htmlファイルからphp関数を直接呼べるか否か、 呼べないとしたら.cgiなどを利用すればよい? 引数なしのphp関数の戻り値を.htmlの一部に出力させるにはどうしたら よいかです。 phpで作成したfunction fnc_test(){return "aaa";}の値を aaa.html内に出力させたいのです。 aaa.phpファイルにだったらecho fnc_test();で表示されると思うのですが、 aaa.htmlに<body>fuc_test();</body>とやってももちろんphpが起動せず、表示されませんよね。 同じ事をさせたいときにaaa.htmlを新しく作成すれば(phpにて"aaa"と書いたaaa.htmlと言う名前のファイルを作成)できると思うのですが、 動的に一部だけ変更するためにはjavascriptを利用するとか、cgiを利用(cgiでラップする?)しなければやっぱり駄目なのでしょうか? .htmlファイルにサーバ上でphpの関数の戻り値(テキスト)を組み込むのにはどうしたらよいですか?できたらjavascriptは使いたくないのですが。 乱文すみません。ご回答宜しく御願いします。

    • 締切済み
    • PHP
  • 外部関数を利用する方法。

    外部関数を利用する方法。 初歩的な質問で恐縮ですが、ご教授願います。 perlで、他のディレクトリ(フォルダ)にあるcgiファイルの関数(sub aaa())を呼び出したいのですが、記述方法がわかりません。 /aaa/a1.cgi #↓=========================== : &hoge; : #↑=========================== /bbb/b1.cgi #↓=========================== : sub hoge{ : } : #↑=========================== このような感じです。よろしくお願いします。

    • ベストアンサー
    • Perl
  • アクセスのクエリでSplit関数は使えないのですか

    レコードにaaa/bbb/cccと入っていて、 クエリで SELECT Split([テーブル1]![フィールド1],"/") AS test FROM テーブル1; とすると、 式に未定義関数 <関数名> があります。(Error 3085) になります。 VBAでやるとしたら Sub test() Dim str As String str = "aaa/bbb/ccc" Debug.Print Split(str, "/")(1) End Sub のような事がしたいのですが クエリでは無理なのでしょうか?

  • Perlで定義されている関数名を全て取得する方法

    Perlで定義されている関数名を全て取得する方法はあるのでしょうか? ソースを見ればわかりますが、取得する方法があれば教えてください。 001.pl sub aaa{ print "a"; } 002.pl sub bbb{ print "b"; }

    • ベストアンサー
    • Perl
  • phpで関数を定義するfunctionは、なんとい

    phpで関数を定義するfunctionは、なんという物なんですか?

    • ベストアンサー
    • PHP
  • PHPの参照わたしについて

    PHPの参照わたしについて質問です。 例えば、ユーザー定義関数の引数を参照渡しとする場合 function test(&$string){ $string .="参照渡し"; } $aaa = "文字列"; test($aaa); print $aaa; 等とすると、一切値のコピーがおこなわれませんよね? 次に function test($string){ $string . ="参照渡し"; return $string; } $bbb ="文字列"; $ccc = test($bbb); print $ccc; と上記のようにした場合、値のコピーが行われるのは 関数の引数に渡すときと 返り値を返すときの2回行われてるんですかね? もし、値のコピーが二回行われているとするなら 次のようにしたら値のコピーは一度だけ・・・少なくとも上の例よりPHPの動作より 軽い?ものになるのでしょうか・ function &test($string){ $string .= "参照わたし"; return $string; } $ddd = "文字列"; $eee =& test($ccc); //ここで関数の返り値を参照渡しする この場合、値のコピーが行われるのは関数に引数を渡すときの1回だけでしょうか? copy on write による動きは無視しておいて、 オブジェクト指向なプログラムでなくユーザー定義関数であれば このように関数の返り値を参照わたしにした方が、理論的?には早いのでしょうか? この場合、引数も参照渡しにすると破壊的関数になるのでそれは避けたいが、 なるべく値のコピーは防ぎたいという状況だと考えてください。 実際、こんな風にすべてのユーザー定義関数の返り値を参照にして定義するなんてこと おそらくないとおもうのですが、単純にコピーの回数がきになったのです。 よろしく御願いします。

    • ベストアンサー
    • PHP

専門家に質問してみよう