2

これは非常に単純な質問であり、php.comでは直接取り上げられていないようです。少なくともそのセクションを見るとわかりません。

いずれにせよ、私はここに特定の関数を持つクラスを持っています:

class CheckOut extends DB_MySQL{

public $fName;
public $lName;
public $numberOut;
public $p_id;

    /.../

    protected function publisherCheck($lName, $fName)
    {
        $this->lName = $lName;
        $this->fName = $fName;

        //Execute test
        $this->checkConnect();
        $stmt = $this->dbh->prepare("SELECT p_id FROM People WHERE lastName = :param1 AND firstName = :param2");
        $stmt->bindParam(':param1', $this->lName);
        $stmt->bindParam(':param2', $this->fName);
        $stmt->execute();

        //Determine value of test
        if($stmt == FALSE)
        {
            return FALSE;
        }
        else
        {
            $p_id = $stmt->fetch();
        }

    }

関数が欠落しているなどのコンストラクターが投稿されていないという事実は無視してください。これらはこのクラスに含まれています。私の質問には関係ありません。

最後のステートメントで$p_idを設定すると、クラスのヘッダーで最初に宣言された変数に影響しますか?基本的に、それはクラス内でグローバルになりますか?

どんな助けでも大歓迎です。

4

2 に答える 2

3

いいえ、ありません。ローカル変数ではなく、クラスのプロパティについて話していることをPHPに伝える必要があります$this->

// Always assignment of a local variable.
$p_id = $stmt->fetch();

// Always assignment of a class property.
$this->p_id = $stmt->fetch();
于 2012-09-18T03:42:02.707 に答える
0

いいえ。これは関数のローカル変数です。あなたがそうしたら$this->$p_id = 'blah';、それはそれに影響を与えるでしょう。クラスで定義した変数はプロパティであるため、でアクセス/変更する$this->....必要がありますが、関数で定義した変数は単なるローカル変数です(これを実行するだけで操作できます$p_id='....')。

それで、

$this->$p_id = '';//will alter the class property

$p_id = '';//will alter the local var defined/used in the function
于 2012-09-18T03:45:05.350 に答える