phpファイル間での関数内の実行結果の即時受渡し
どうかお教え願いませんでしょうか。以下のようにb.php内で計算された結果である変数$amountをa.phpへリアルタイムで渡したいのですがどうしてもできません。(a.phpとb.phpは異なる階層間にあります。)
この様な場合、何に問題があると考えられるのか、設定などをどのように変更すれば目的を達成できるか、あるいは全く異なる方法など、アドバイス、ご教授頂けませんでしょうか。
:追記
x.js
$.ajax({
type:"POST",
url:"a.php",
data:"type=price",
success:function($amount){
$("#amount").val($amount);
}});
a.php
case 'price':
require_once(PATH.'/b.php');
// 追記:$amount = "232321" 試しに左の様な設定にすると、問題が解決された結果になります。
echo $amount;
break;
b.php
追記:
// $amount = "237272"; 左記の様に値をfunction amount($db,$sum,$stay)の外に設定するとhtml上で237272が設定されますので、算出された実行結果である$amountの受け渡しは別として、php間、そしてjs、htmlでの値の受け渡しが確認されました。
function amount($db,$sum,$stay){
// 追記:global $amount; を試しましたが、$amountをa.phpで取得できていない様です。
//global $amount;
//諸々の計算
$sub_total1 = sum1 + $tax;
$sub_total2 = sum2 + $margin;
$amount = $sub_total1 + $sub_total2;
// echo $amount; この記述によって、$amountの値が上記の同じページの違う箇所に表示されます。
//追記 html上の表示箇所。
if($type == 'html'){
//諸々のhtml上の設定。
$tem .= "<td>".number_format($sub_total1)."円</td>";
$tem .= "<td>".number_format($sub_total2)."円</td>";
$tem .= "<td>".number_format($amount)."円</td>";
return $tem
}
}
システムフロー上はa.phpに$amountが渡った後、js、そしてhtmlに渡りそこで設定されますが、以上のa.phpで$amountがb.phpから渡っていれば私が抱える問題は解決されます。
$_SESSIONも試しましたが、周回遅れ(前回)の計算結果が表示される様で、値の表示されるタイミングが合わないです。(リアルタイムに反映されない。)
以下の様な設定にすると、html上でb.phpの全記述が表示されますのでパス自体には問題がないと思われます。
a.php
case 'price':
$amount = file_get_contents(PATH.'/b.php');
echo $amount;
break;
追記:
a.phpを起動させる元のファイルは上記のx.jsです。data:"type=price",という形式でa.phpのcase 'price':を呼び、結果が得られれば#amountをhtmlに渡します。追記:
function amount()内での計算は全てこのfunction内で情報を取得し、計算されたものになります。かなり長い計算の為、ここでは混乱を回避する為に簡略化させて頂きましたが、必要とされる情報は提示していると思われます。追記:
b.php内のfunction amount($db,$sum,$stay)内の実行結果である$amountをグローバル変数にする方法が分かりません。あるいは、上記にも記しましたが、この実行結果である$amountを算出直後にfunction amount($db,$sum,$stay)の”外”に設定できれば、php,php,js,htmlと値が受け渡せると思われます。
-最新-
追記:
最初に情報提供できなく申し訳ございません。function amount内にhtml表示をする箇所がありreturn値はそのhtmlに返されます。このhtml用の戻り値(return $tem)を削除し、return $amountにすると、php,php,js,htmlと$amoutnが渡り、当初の目的が実現されますが、そのhtmlは削除できません。よって、return $amountを使用できないと思われますが、本件の様なhtmlを使用している場合、複数の戻り値を返す様なことはできるのでしょうか。追記:
Classを使用すると、システムの他の記述が影響を受ける様でかなり大掛かりに変更をかけない限り機能しませんので、現時点では保留にした方が良さそうです。追記:
グローバル変数がリスクが皆無で、本システムでも機能しているのであれば、一番簡単に実装できそうなのですが、現時点で機能させることができていない以上、同じことになるかもしれませんが、function amount2の様な新たな$amount用のための関数を作成し、そこでfunction amountの$amountを取得し、a.phpへ渡すなどっといった方法はありませんでしょうか。