2012-09-18 15 views
2

這是一個非常直接的問題,似乎並沒有直接在php.com上解決 - 至少從查看該部分。在PHP類中建立變量作用域?

在任何情況下,我有一個特定的功能在這裏的一類:

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是否會影響最初在類頭中聲明的變量?從本質上講,它會在課堂上成爲全球性的嗎?

任何幫助表示讚賞。

回答

3

不,它不會。你總是需要$this->告訴PHP你說的是類屬性,而不是局部變量。

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

// Always assignment of a class property. 
$this->p_id = $stmt->fetch(); 
+0

哈,根本無法趕上,即使我這樣做,每隔變量。那麼,這回答了它,並解決了未來的問題。謝謝。 – Mlagma

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