• 締切済み

functionの使い方

PHP5を使用しております。 PHP初心者です。アドバイスお願いいたします。 ■内容 functionで、データを引き継ぐことができなくて困っています。 ------------------------------------------------------- <?php $answer=2; function moji($answer_moji){ //HTMLエスケープを行う $answer_moji=htmlspecialchars($answer_moji); print_r("HTMLエスケープ=".$answer_moji."<br>"); $answer_moji=$answer_moji+1; print_r("+1=".$answer_moji."<br>"); return $answer_moji; } moji($answer); print_r("moji=".$answer); ?> ---------------------------------------------------------- 結果: HTMLエスケープ=2 +1=3 moji=2 理想の結果: HTMLエスケープ=2 +1=3 moji=3 よろしくお願いいたします。

みんなの回答

  • umota
  • ベストアンサー率46% (150/324)
回答No.4

回答の言葉がわからなければ、安易に質問をくり返さず 自分で検索してください。 たとえば 「 php 関数の戻り値 」 でググれば詳しい説明がみつかるはずです。 (技術系検索は Google がお推めです。) # 初心者を免罪符に荒らされると迷惑です。

参考URL:
http://www.google.co.jp/search?q=php+%8A%D6%90%94%82%CC%96%DF%82%E8%92l&lr=lang_ja&num=20&hl=ja&btnG=Google+%8C%9F%8D%F5
全文を見る
すると、全ての回答が全文表示されます。
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.3

PHP5なんだからclassで組めばだいぶちがってくると思いますよ

noname#58128
質問者

お礼

ご回答ありがとうございます。 実は、classの中で、簡単な処理の繰り返しをしたくてfunctionを使用することにしました。 $answer=moji($answer); print_r("moji=".$answer); で解決いたしました。 classでもチャレンジしてみます。 まだまだ勉強しなければと思います!

全文を見る
すると、全ての回答が全文表示されます。
  • masa6272
  • ベストアンサー率66% (93/140)
回答No.2

関数(function)には、値が渡されます。 同じ名前の変数でも、関数の内部と外部はまったく別物です。 関数の中でいくら、値を変更しても外に影響は与えません。 <?php function myfunc($i) { $i++; echo $i; } $i = 1; myfunc($i); echo $i; ?> では、myfuncの中で、渡された1を1増やした結果の2が表示されますが、 関数の外の$iは、変化してませんので、外では1のままです。 後、コーディングで、いくつか変な所が・・ print_rは、配列を書き出します。これでも、動きますが、文字列を書くだけでしたら、通常はprintかechoを使います。 returnは、値を返すための物です。このプログラムでは、関数を呼んでも、値を使用していません。 <?php function myfunc($i) { $i++ return($i); } $i = 1; $j = myfunc($i); echo $i; echo $j; } ですと、12 と出力されます。 もうちょっと、基本を勉強した方がいいと思います。

noname#58128
質問者

お礼

ご回答ありがとうございます。 ご指摘の通りだと思います。 まだまだ勉強いたします。

全文を見る
すると、全ての回答が全文表示されます。
  • umota
  • ベストアンサー率46% (150/324)
回答No.1

引数を参照渡しにする または、関数の戻り値を使う。 # [技術者向]なのでこれでわかるはずです。

noname#58128
質問者

お礼

ご回答ありがとうございます。 技術者向けとは言え、初心者なので、、、がんばります。 $answer=moji($answer); print_r("moji=".$answer); で解決いたしました。 この解決法と同じ回答を 教えてくださったということでしょうか。。

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

関連するQ&A

  • ユーザ定義関数の使い方

    PHP5を使用しております。 PHP初心者です。アドバイスお願いいたします。 ■内容 functionで、データを引き継ぐことができなくて困っています。 ------------------------------------------------------- <?php $answer=2; function moji($answer_moji){ //HTMLエスケープを行う $answer_moji=htmlspecialchars($answer_moji); print_r(\"HTMLエスケープ=\".$answer_moji.\"<br>\"); $answer_moji=$answer_moji+1; print_r(\"+1=\".$answer_moji.\"<br>\"); return $answer_moji; } moji($answer); print_r(\"moji=\".$answer); ?> ---------------------------------------------------------- 結果: HTMLエスケープ=2 +1=3 moji=2 理想の結果: HTMLエスケープ=2 +1=3 moji=3 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • データベースのテキストデータの改行方法について

    別サイトで質問して nl2br関数を使えば改行が反映されるとわかったのですが、 <?php $str = nl2br(htmlspecialchars($str, ENT_QUOTES, 'UTF-8'), false); や <?php function h($str) { return htmlspecialchars($str, ENT_QUOTES, 'UTF-8'); } など、 上記のを試してみたのですが、データベース上のテキストデータの改行がサイトに反映されず困っております。 http://uploda.cc/img/img52b55ee23c01f.png このようにDBに記入したデータをどのようにすれば改行されますでしょうか? 初心者で非常に申し訳ございませんが宜しくお願いします。

    • 締切済み
    • PHP
  • functionのreturnについて

    初心者です。 おバカな私にご教授お願い致しますm(_ _)m functionについて調べていました。 好きな関数を組み合わせて使えるので便利だと思いましたが、、、 returnの意味が理解できません。 function xxx(){ $sum = 'こんにちは'; return $sum; print 'ここは処理されない'; } 上記の様な説明をネットで見たのですが、return の下が処理されないのだったら、そもそも function xxx(){ $sum = 'こんにちは'; } これでいいじゃないか!と思うのですが、なぜ、returnが必要なのでしょうか。 よろしくお願いしますm(_ _)m

    • ベストアンサー
    • PHP
  • PHPのエンコードについて教えて下さい。本のサンプルに

    PHPのエンコードについて教えて下さい。本のサンプルに function h($var) { // HTMLでのエスケープ処理をする関数 if (is_array($var)) { return array_map('h', $var); } else { return htmlspecialchars($var, ENT_QUOTES); } } と書いてあり、もし配列だったらhtmlエンコードしてはいけず、配列ではなかったらhtmlエンコードするような意味だと思うのですがどうして配列だったらhtmlエンコードしてはいけないのですか??? お手数かけますが教えて下さい。お願いします。

    • ベストアンサー
    • PHP
  • printの表示形式について質問です。

    現在PHPを著書を利用して独学で習得中です。 余り詳しい説明のない著書のようで、 今一要領がつかめないのですが、 下記のようなプログラミングを行いました。 --<program_start>-- <?php class MyClass{ function __construct(){ print("オブジェクトが生成されました<br/>"); } function __destruct(){ print("オブジェクトが破棄されました<br/>"); } function calculate($a, $b){ print("$a + $b は ".$a+$b." です<br/>"); } } $objCls = new MyClass(); $objCls->calculate(2, 3); ?> --<program_end>-- その結果下記のように表示されました。 --<answer_start>-- オブジェクトが生成されました 5 です オブジェクトが破棄されました --<answer_end>-- 著書では結果の部分の計算表示が 2 + 3 は 5 です となっていますが同じように表示されません。 どこか誤っているのでしょうか?

    • ベストアンサー
    • PHP
  • PHPの問題

    下のプログラムご覧ください。 <HTML> <HEAD> <TITLE> 門題2</TITLE> </HEAD> <BODY> <?php $val1 = 90; $val2 = 30; $answer = 90 * 30; $answer1 = 90 / 30; $answer2 = 90 % 30; print "変数X1の初期値は$X1です。<BR>"; print "変数Y2の初期値は$Y2です。<BR>"; print "XとYの積は answerです。<BR>"; print "XとYの商は answer1です。<BR>"; print "XとYで割った剰除は answer2です。<BR>"; ?> </BODY> </HTML> 実行してみたもののエラーになりX1,Y2の所が出ていなくて 答えも出ませんなぜでしょうか? ご存知の方どうかお教えください。

    • ベストアンサー
    • PHP
  • Function

    Sub test1() Debug.Print 全角("aaa") End Sub Public Function 全角(mystr) mystr = StrConv(mystr, vbWide) End Function このVBAコードはどこがおかしいですか? 私の理想としては Public Function 全角(mystr) のmystrの中に半角の「aaa」が入り mystr = StrConv(mystr, vbWide) で全角の「aaa」になり その結果が Sub test1()に戻った時に Debug.Printに吐き出される予定だったのですが 何も表示されません。 関数(Function)を使うべきではないのでしょうか?

  • functionの外にある{$myrow["url"]}をfunction内で使いたいです

    <?php $box_template .=<<<eof <a href="{$myrow["url"]}" rel="nofollow"> <img src="{$myrow["image1"]}" width="157" /><img src="{$myrow["image2"]}" width="100" /> </a> eof; mysql_db_read($mysql_query,$box_template); function mysql_db_read($mysql_query,$box_template){ $db = mysql_connect("*******","****","****"); mysql_select_db("******",$db); $result = mysql_query($mysql_query,$db); if ($myrow = mysql_fetch_array($result)) { do { $myrow["url"] = htmlspecialchars($myrow["url"]); $myrow["image1"] = htmlspecialchars($myrow["image1"]); $myrow["image2"] = htmlspecialchars($myrow["image2"]); print $box_template; } while ($myrow = mysql_fetch_array($result)); } else { echo "error"; } }//function ?> $box_templateの{$myrow["url"]}などにmysqlから取ってきたデータを適用したいのですが、{$myrow["url"]}に値が入ってくれません。 どうすればいいのでしょうか。 教えてください。よろしくお願いします。m(_ _)m

    • 締切済み
    • PHP
  • ユーザ関数function の扱いについて。

    おそらくは、初歩的な質問なのだろうとは思いますが、どうぞよろしくお願い致します。 早速ですが、質問に入ります。(PHP4または5での話です。) //関数を定義 function test($a){   $b = $a*100;   print $b;   return $b; } //テキトーに値を用意して変数に格納 $c = 5; //------------------------ 作った関数を使ってみる //------------------------ //(その1)関数内の処理結果をprintしてくれるものと思って使っている。 test($c); //------------------------- //(その2)関数内の処理結果の戻り値を変数$dで受け、それをprint。 //「その1」との違いを調べたくて、こんなことをしている。 $d = test($c); print $d; //------------------------------- さて、何が言いたいかと言いますと(笑)、 まず、上記(その2)に着目して頂いて、 関数定義の中でprint()を使用している関数に対し、 その定義の中にreturnがあるからと、 $dでその戻り値を受けているわけですが、 この場合、print()で出力した値は、一体、どこへ行ってしまったのでしょうか。 このような質問のしかたをしていますが、 分からないのは、この辺りの処理の流れ全体なんです。 つまり、print()したものがどうなったのかだけが知りたいわけではなく、 ユーザ関数内のprintとreturnの関係とか、そのあたりです。(笑) return; が来たら関数内の処理を抜ける、 ということは分かっています。 以上、1つずつ順を追って説明して頂けると助かります。 //-------------------補足------------ //新たに関数を定義 function test2($a){   $b = $a*100;   print $b; } $e = 5; $f = test2($e); //returnのない関数から戻り値を受け取ろうとしてもダメ //ということは、こんな私にでも分かっています。 //---------------------------- 以上、よろしくお願いします。

    • ベストアンサー
    • PHP
  • functionとforeachでメール送信

    こんにちは。前にも質問をさせて頂いたのですが・・・ HTMLのメールフォームからPOSTでデータを受信してクライアントとユーザーの両方にメールを送るようなプロゴラムを記述しています。 データの受け取りからメールの送信のスクリプトを function message(){ foreach($_POST as $key => $val){ print( $key .":" .$val. "<br>"); }; }; $message= " テスト送信 <br>"; $message.= message(); if(mail("クライアントのメールアドレス" , "テストメール", $message, $head)&& mail(message(34) , "テスト確認メール", $message, $head)){ print("・・・"); }else{ print("ご注文メール送信に失敗しました。<br />\n"); print("再度ご注文フォームより注文して下さい。\n"); print("<a href=\"#\">戻る</a>"); }; としています。message(34)はユーザーのアドレスを取得しています。 しかし実行すると画面にPOSTで取ってるデータが2回表示され肝心のメールは クライアントには " テスト送信 と本文に表示されてユーザーにはメールが届きません。 質問が2つですみませんが、 1、functionで関数を作りforeachでデータを取得しメールで送信するというやり方は無謀なのでしょうか? もしできるのでしたらやり方を教えて頂けないでしょうか? 2、メールの本文にある"を消すにはどうしたらいいのでしょうか? かれこれ1週間近く悩んでいるのですが、一向にできそうにありません・・・。皆さんの知恵と知識をお借りできたらなと思います、どうかよろしくお願いします。 他に何かいる情報があれば教えて下さい。分かる範囲で補足していきます。

    • ベストアンサー
    • PHP
なぜできない?
このQ&Aのポイント
  • キヤノン製品のInkjet cIoud Printingへの登録方法を教えてください。
  • キヤノン製品を利用してInkjet cIoud Printingを使いたいのですが、登録方法がわかりません。
  • キヤノン製品のInkjet cIoud Printingの登録ができない理由がわかりません。
回答を見る