質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

FuelPHP

FuelPHPは、軽量高速で開発が可能なPHPのWebアプリケーションフレームワークです。

Q&A

解決済

6回答

5905閲覧

戻り値が取得できない

george047

総合スコア10

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

FuelPHP

FuelPHPは、軽量高速で開発が可能なPHPのWebアプリケーションフレームワークです。

0グッド

0クリップ

投稿2016/02/25 03:37

fuelPHP1.7で他の人が作ったソースの改修を行っているのですが、不可解な症状が
出ているので、アドバイスを頂ければと思います。

ある処理のサブルーチンで関数を呼び出し、引数を渡して戻り値を取得する、という
ものです。

サブルーチンは他のサブルーチンと一緒に別ファイルにまとめてありますが、その
サブルーチンへは引数もわたっており、returnする変数の中には求めている戻り値
が入っているのは確認できているのですが、呼び出し元の戻り値を格納する変数に
は値が取得できません。

同様のサブルーチンがこのサブルーチンとは別ファイルにあり、そちらでは取得で
きているのですが、二つのサブルーチンを比較しても、やっていることに大きな違
いはなく、問題が切り出せずにいます。

問題がfuelPHPなのかも特定できないのですが、今までサブルーチンに引数を渡せば
returnで戻ってくるもの、と決め込んでいましたが、returnする変数にきちんとした
値が入っているにもかかわらず、受け取り側で取得できないのは、どんな原因が考え
られるでしょうか?

アドバイス頂ければ幸いpjp

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2016/02/25 03:59

値が取得できないと判断するに至る根拠は何かのエラーメッセージですか、それともvar_dump()とか? サブルーチンはPHPとしての単純functionなのかクラス内のメソッドなのか。記号一つで意味が変わる世界なので、ソースを示してもらわないと適切なアドバイスになりません。
george047

2016/02/25 04:41

サブルーチンは一般的なfunction()です。 値が取得できないと判断する根拠は、エラーメッセージではなく、 ・returnする変数に適切な値が入っている、受け側に入っていない ・ほぼ内容の同じサブルーチンではreturnしたものが受け取れている  ⇒なので、何らかの設定の問題なのではと思っている という状況です。 多分、そこのソースのみを記載してもその部分に間違いがあるとは思えないので、 一般論として考えられる、思い浮かぶケース(例えばfuelPHPの設定など)があるよ うであれば教えて頂きたいと思いました。
sonor_3rd

2016/02/25 05:12

「returnする変数の中には求めている戻り値が入っている」とありますが、値が入っているのを確認した場所はreturnする直前で間違いないでしょうか?
george047

2016/02/25 05:17

直前です。returnする変数をそのままコピペしてvar_dumpしました。
sonor_3rd

2016/02/25 06:08 編集

他の解答者さんの内容を見ても、やはりコーディングに問題があると思われます。ソースコードの掲載は可能でしょうか?
sekitaka_1214

2016/02/25 11:19

FuelPHP含めてフレームワークは、クラス名や関数名、フォルダ構造が意味を持つことがあります。 サブルーチンと呼んでいるプログラムのファイルがどのディレクトリにあるかや、呼び出し元の記述がどのようになっているか。 クラスの継承関係などもわかると解決に近づくと思います。
guest

回答6

0

解決しました。
恥ずかしい結果になるとは思っていましたが、親身に答えを頂いた方に申し訳ないので書いておきます。
結果から言うと、サブルーチンの関数を含むクラスがあり、そのクラスを継承している子クラスがあり、
そこで戻り値を消していました。
自分でデバッグの際にやったことをすっかり忘れていました。
関数名も親クラス子クラスで同じ名前を使っていたことから、すっかり子クラスの存在を忘れていました。

負け惜しみにはなりますが、自分であれば多分同じ関数名は使わないと思うのですが、慣習的に同じ名前
を使ったりするのでしょうか?
いずれにしても、恥ずかしながら勉強になりました。

色々考えてくださった皆様、ありがとうございました。

投稿2016/02/26 02:50

george047

総合スコア10

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

例えば、以下のように単純に関数を呼び出した場合でも、configの設定によって、fuelのcoreのauth.phpのAuthクラスのloginメソッドが呼ばれたり、自作クラスのloginメソッドが呼ばれる場合があります。

php

1Auth::login();

また関数によっては、abstractで定義されたクラスの関数を経由して、特定のクラスのインスタンスの同名のメソッドを実行し、その戻り値そのまま返却したり、加工して返却する場合もあります。

どちらにしても、やはりコードがほしいですね。

投稿2016/02/25 11:27

sekitaka_1214

総合スコア509

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

returnしているのがarrayで、返り値を受ける側でlist()を使ってない、とか。
呼び出される側のfunctionで、returnする値を格納している変数の宣言をstaticにする、とか。
(ソースを見ないで答えられる人、いるのかな。。)

投稿2016/02/25 06:00

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

Fuel PHPにはコンソールモードがあるので、そこから関数を単体で呼び出すなど、テストもできます。

投稿2016/02/25 05:12

maisumakun

総合スコア145123

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

george047

2016/02/25 05:34

ありがとうございます。 これはこれで使うまでちょっと時間がかかりそうですが..... そういえば、fuelPHPにはCode Profilerっていうのがありましたよね。 ちょっとその辺から探ってみて、ダメなようだったらコンソールモードに挑戦してみます。
guest

0

正しくコーディングできていれば正しく返ってくるはずです。
おっしゃっている値のチェックが全て正しい前提ですと、サブルーチン内のreturn ○○;の○○の綴りが間違っている等のスペルミスしか思いつきませんね。

投稿2016/02/25 05:00

sonor_3rd

総合スコア114

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

george047

2016/02/25 05:10

returnする○○の中身は確認できているので、そこではないと思います。
guest

0

returnする変数にきちんとした値が入っているにもかかわらず、受け取り側で取得できないのは、どんな原因が考えられるでしょうか?

ソースを見ないで挙げられる原因としてはこんな所でしょうか。
・「returnする変数にきちんとした値が入っている」というのが確認ミス
・「受け取り側で取得できない」というのが確認ミス
・関数がちゃんと呼べていない
・呼んでいるつもりのものと別の関数を呼んでいる

投稿2016/02/25 03:57

otn

総合スコア84423

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

george047

2016/02/25 04:55

ありがとうございます。 一般論でソース無で聞くとそこを指摘されるとは思いますが、ソースがあってもその 部分だけでは何もわからないと思いますし、かと言って全てのソースを抜き出して 掲載することもできないので、あえて一般論で、サブルーチン内で取得できている 戻り値が取得できないケースをお聞きしました。
otn

2016/02/25 06:22 編集

> かと言って全てのソースを抜き出して掲載することもできないので 普通は、本物ソースを元に削っていって、「現象が再現する最小限のソース」を作ってそれを提示します。 また、その最小限のソースを作る過程で、ミスを発見できたりします。 とにかく、なんらかのミスがないとそういう事態はありえません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問