- PHPの関数、この書き方は一般的なのでしょうか?

ゲスト (PHP初心者...

はじめまして
以下のようなコードを読み、動いてはいるので正しいコードだと思うのですが、書き方としてどうなのかが疑問だったのでお聞きしたいと思っています。
PHP歴は約3か月です。
よろしくお願いいたします。
if($this->getData($this->test_id,$this->user_id)) {
$ret = $this->updateDB($new_data, $old_data);
} else {
$ret = $this->registDB($new_data);
}
いきなり$old_dataときたのでなんだろう?と思っていると、
function
function getData($test_id, $user_id){
$data = array();
$array = array();
$data['where'] = " test.id = ? AND user.id = ?";
$params = array($test_id, $user_id);
$data['limit'] = "1";
$data['order'] = "";
$array = getData('test_user', $data, $params);
if($array['data']){
$old_data = $array['data'][0];
return true;
}else{
return false;
}
}
関数hasOfferDataの中で作られた変数$old_dataなので、関数が実行された後には使える関数なのだとは思うのですが、このような書き方って一般的なのでしょうか?
関数の中で定義した変数をそのまま使うというのがちょっと不思議で
ちょっとあまり見たことがなかったもので、いい書き方なのか悪い書き方なのか分からないためお聞きしたいと思いました。
ご意見よろしくお願いいたします。
コメント

- 2:ゲスト (BLUEPIXY)
- 2008/10/23 19:47
変ですね。
関数の中で使われた変数はローカル変数になると思います。
なので、その場合、関数の外で見えない(使えない)はずだと思います。
逆にグローバルな変数を関数内で使う場合

- 3:kaz
- 2008/10/24 10:02
同じclassの中の関数だったりしませんか?
$this->getData()
class内変数(プロパティ)として$old_dataが定義されていれば、間違いではないと思いますが。
class xxxx(){
var $old_data = "";
function getData($test_id, $user_id){
// コード
}
// どこかで
if($this->getData($this->test_id,$this->user_id)) {
$ret = $this->updateDB($new_data, $old_data);
} else {
$ret = $this->registDB($new_data);
}
}
こんな感じになっているなら、そうだと思います。
- 4:ゲスト (トピ主)
- 2008/10/24 10:53
大切なことを書き忘れて申し訳ありません。
>同じclassの中の関数だったりしませんか?
はい。同じクラス内です。
ただ
var $old_data = "";
この記述はないのでプロパティの宣言はされていません。この宣言はありません。
このプログラムはPHP4で動いています。
>class内変数(プロパティ)として$old_dataが定義されていれば、間違いではないと思いますが。
そうなのですね。
ありがとうございます。
間違いではないというのは、「これでOK」もしくは「これでもいいけどあまりこの書き方は…」でいうとどちらでしょうか?
勉強中のため、まだその判断がつきません。
よろしかったらご意見よろしくお願いいたします。

- 6:kaz
- 2008/10/24 11:43
間違い・不適切かどうかは、そのプログラムがどう設計されているかによるのでなんともいえないかと。。。
PHPというか、オブジェクト指向という意味では、同一クラス内でプロパティを共有すること自体はおかしくはありません。
http://www.php.net/manual/ja/language.oop.php
このあたりを一度目を通して見て、そのクラスの構造を眺めなおしてみるともう少し判断のために必要な情報が見えてくるかもしれません。
ソースを見る限り、このclass内のgetDataメソッドとは別に、getData関数が定義されてもいるようですね。
この部分の書き方、というよりプログラム全体のクラス構造がもしかすると適切ではないかもしれません。

- 7:kaz
- 2008/10/24 11:53
>5さん
おっと、たしかに^^;
お恥ずかしい。。
そうすると、なにかトリッキーなことをしているか全体的に見ないとわからないかもですね。。
実はこのクラス内の

- 8:ゲスト (@)
- 2008/10/24 11:59
updateDBメソッドで
「$old_data」が渡されていないなら「$this->old_data」を使用する
というようなロジックになっていたりはしないでしょうか?

- 9:だいら
- 2008/10/24 12:24
ソース全部貼ってくだしい。
ソースが貼れないなら「エスパー呼んでください」としか言えないかと。
今見える範囲で言うなら、少なくとも呼び出し元の$old_dataとgetData内の$old_dataはまったく関係ありません。
前へ 1 次へ![]()
コメントする
[block]から[/block]までの範囲はブロック表示されます。
部分的に目立たせたい時や、引用などにお使いください。
[code]から[/code]までの範囲は等幅表示されます。
ソースコードや設定ファイルの記述などにお使いください。







訂正します。
誤 関数hasOfferDataの中で作られた変数$old_dataなので、
正 関数getDataの中で作られた変数$old_dataなので、
失礼いたしました。
よろしくお願いいたします。