PHPの関数、この書き方は一般的なのでしょうか?
ゲスト
ゲスト (PHP初心者...
ATOMRSS
  • コード求むID: 338
  • 登録日時:  2008/10/23 16:46
  • 最終更新日時: 2008/10/28 20:17
  • アクセス数: 594
  • タグ:  php
  • codeなにがしブックマークに追加する 0 users
  • このページを del.icio.us に追加
  • このページをはてなブックマークに追加

はじめまして
以下のようなコードを読み、動いてはいるので正しいコードだと思うのですが、書き方としてどうなのかが疑問だったのでお聞きしたいと思っています。
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 getDataの中で作られた変数のようなのですが。

    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なので、関数が実行された後には使える関数なのだとは思うのですが、このような書き方って一般的なのでしょうか?
関数の中で定義した変数をそのまま使うというのがちょっと不思議で
ちょっとあまり見たことがなかったもので、いい書き方なのか悪い書き方なのか分からないためお聞きしたいと思いました。

ご意見よろしくお願いいたします。


コメント

  • ゲスト
  • 1:ゲスト (トピ主)
  • 2008/10/23 16:48

訂正します。

誤 関数hasOfferDataの中で作られた変数$old_dataなので、
正 関数getDataの中で作られた変数$old_dataなので、

失礼いたしました。
よろしくお願いいたします。

  • GoodJob
  • 0

  • ゲスト
  • 2:ゲスト (BLUEPIXY)
  • 2008/10/23 19:47

変ですね。
関数の中で使われた変数はローカル変数になると思います。
なので、その場合、関数の外で見えない(使えない)はずだと思います。
逆にグローバルな変数を関数内で使う場合 global を修飾する必要があります。

GJ

  • kaz
  • 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);
}

}
こんな感じになっているなら、そうだと思います。

  • GoodJob
  • 0

  • ゲスト
  • 4:ゲスト (トピ主)
  • 2008/10/24 10:53

大切なことを書き忘れて申し訳ありません。

>同じclassの中の関数だったりしませんか? 

はい。同じクラス内です。
ただ

var $old_data = "";
この記述はないのでプロパティの宣言はされていません。

この宣言はありません。
このプログラムはPHP4で動いています。

>class内変数(プロパティ)として$old_dataが定義されていれば、間違いではないと思いますが。

そうなのですね。
ありがとうございます。

間違いではないというのは、「これでOK」もしくは「これでもいいけどあまりこの書き方は…」でいうとどちらでしょうか?

勉強中のため、まだその判断がつきません。
よろしかったらご意見よろしくお願いいたします。

  • GoodJob
  • 0

  • ゲスト
  • 5:ゲスト
  • 2008/10/24 11:37

クラスのメンバ変数にアクセスするには「$this->old_data」と書かなきゃいけなかった気がするんですが、違いましたっけ?

  • GoodJob
  • 0

  • kaz
  • 6:kaz
  • 2008/10/24 11:43

間違い・不適切かどうかは、そのプログラムがどう設計されているかによるのでなんともいえないかと。。。
PHPというか、オブジェクト指向という意味では、同一クラス内でプロパティを共有すること自体はおかしくはありません。

http://www.php.net/manual/ja/language.oop.php

このあたりを一度目を通して見て、そのクラスの構造を眺めなおしてみるともう少し判断のために必要な情報が見えてくるかもしれません。

ソースを見る限り、このclass内のgetDataメソッドとは別に、getData関数が定義されてもいるようですね。

この部分の書き方、というよりプログラム全体のクラス構造がもしかすると適切ではないかもしれません。

  • GoodJob
  • 0

  • kaz
  • 7:kaz
  • 2008/10/24 11:53

>5さん

おっと、たしかに^^;
お恥ずかしい。。

そうすると、なにかトリッキーなことをしているか全体的に見ないとわからないかもですね。。

実はこのクラス内の updateDB() に参照渡しで空の変数を渡しているだけだったり。。。

  • GoodJob
  • 0

  • ゲスト
  • 8:ゲスト (@)
  • 2008/10/24 11:59

updateDBメソッドで
「$old_data」が渡されていないなら「$this->old_data」を使用する
というようなロジックになっていたりはしないでしょうか?

  • GoodJob
  • 0

ソース全部貼ってくだしい。
ソースが貼れないなら「エスパー呼んでください」としか言えないかと。
今見える範囲で言うなら、少なくとも呼び出し元の$old_dataとgetData内の$old_dataはまったく関係ありません。

  • GoodJob
  • 0

  • ゲスト
  • 10:ゲスト
  • 2008/10/28 20:17

実はバグっているけど、たまたまバグが発現するケースに当たってないだけとか。

GJ

前へ 1 次へ

コメントする

[block]から[/block]までの範囲はブロック表示されます。
部分的に目立たせたい時や、引用などにお使いください。

[code]から[/code]までの範囲は等幅表示されます。
ソースコードや設定ファイルの記述などにお使いください。

ゲスト投稿者:ゲスト:

関連ソースコード・ノウハウを登録

PDFLib | A library for processing PDF on the fly プレゼン公開・共有サイト handsOut.jp オープンタイプ株式会社 チーム・マイナス6% - みんなで止めよう温暖化

ブックマークコメント