[PHP-users 20695]Re: クラス内での可変変数の配列について
MIYAHARA Yuuki
miyahara @ core-techno.co.jp
2004年 3月 9日 (火) 14:36:57 JST
はじめまして、宮原と申します。
> クラス内で配列の可変変数を扱っているのですが、アクセスするとエラー表示も
> なく、ブラウザはサーバーが見つかりませんと返してきます。
「ページが表示できません」などではなく ですか?
「サーバーが見つかりません」というのはそのままの意味なので、
PHPのバグなんかとはちょっと考えにくいと思ったのですが・・・。
> foreach($colAry as $val) {
> foreach($this->colVars[$val] as $key=>$dataVal) {
> global $$val;
> ${$val}[$key] = $dataVal; ←ここが問題?
> }
> }
この部分を利用しつつ、クラスを使用しないサンプルを作り、
PHP4.3.4で動作させてみたところ、問題なく動作しました。
(サンプルデータの量が少なかったせいかもしれませんが。)
また、原因とは関係ないだろうとは思ったのですが、
気になったので一応言ってみます。
"global $$val;" の位置についてですが、
foreach($this->colVars[$val] as $key=>$dataVal)ループの中にあると、
同じ変数を何度もグローバルにしようとするという無駄な処理が・・・。
//--
foreach($colAry as $val) {
global $$val;
foreach($this->colVars[$val] as $key=>$dataVal) {
${$val}[$key] = $dataVal;
}
}
//--
このように一つ外に出すと、
"global $$val;" を通るのは$valの値毎に一度だけなので、よりGoodに思います。
実はこれが原因・・・なんてことは無いでしょうか。
> 引数の$colAryにはDBのフィールド名を配列で入れてます。そしてgetQryDataメ
> ソッドでDBのデータを多次元配列で$colVarsに代入しています。ここまでは問題
> なく動作しています。
もし解決しないのであれば、この際思い切って、
getQryDataメソッドは無視して
下の処理を試してみるのもいいかもしれません。
//--
function getQryVars($db,$sql,$colAry) {
$con = pg_connect($db);
$result = pg_query($con, $sql);
foreach($colAry as $val) {
global $$val;
}
for($i=1;$row=@pg_fetch_array($result,$i);$i++) {
foreach($row as $key=>$val) {
${$key}[$i] = $val;
}
}
return true;
}
//--
ほとんど同じ処理をしているつもりです。
せっかくDBのフィールド名が入った$colAryがあるので利用してみました。
# 動作テストをしてないのでバグがあるかもしれませんが(^^;
以上
PHP-users メーリングリストの案内