-2

私はこのようなクラスを持っています:

class sqlClass    {
  var $myvar = "test value 1"
  public function test01() {
    global $myvar;
    //some operations here
    $myvar = "test value 2"
    return true;
  }
}

他のファイルには、次のPHPスクリプトがあります。

include_once('functions.php'); // where my class is
$data = new sqlClass();
if ($data->test01()) {
  echo $data->myvar;
} else { echo "No value"; }

この例test01()では常にtrueなので、変更されることは保証されてい$myvarます$myvarが、値を変更するはずのクラスで関数を実行した後に出力すると、代わりに古い値「testvalue1」が出力されます。 「テスト値2」の。だから、私は何が欠けていますか?

4

2 に答える 2

4

さて、まず第一に、あなたはvarキーワードを使うべきではありません。レガシーアプリを維持しているのでない限り、使用すべきではないphp4です。代わりに、可視性キーワードのpublic1つである、、、protectedまたはprivateを使用します。

global第二に、クラス内で使用する必要はありません。$this->memberNameクラス外の変数にアクセスする必要がある場合に使用するクラスメンバーにアクセスするには、それらを引数としてメソッドまたはコンストラクターに渡す必要があります。

したがって、これがあなたのコードがどのように見えるべきかということをすべて考えると:

class sqlClass    {
  public $myvar = "test value 1";

  public function test01() {

    //some operations here
    $this->myvar = "test value 2"

    return true;
  }
}

php5のマニュアルのOOPに関するセクション全体を読むと言っていました

于 2012-10-22T13:38:39.657 に答える
0

オブジェクトのインスタンス変数を変更するには、次を使用します$this->

class sqlClass {

    public $myvar = "test value 1"

    public function test01() {
      $this->myvar = "test value 2"
      return true;
    }

}

これにより、変数が変更されます$data->myvar。あなたがしていることは、あなたが出力するglobalグローバル変数を変更していることを意味します。オブジェクトとは何の関係もありません。myvarecho $myvar$data

于 2012-10-22T13:38:12.667 に答える