在 PHP 类中建立变量范围?
Posted
技术标签:
【中文标题】在 PHP 类中建立变量范围?【英文标题】:Establishing variable scope in PHP class? 【发布时间】:2012-09-10 07:22:50 【问题描述】:这是一个非常直截了当的问题,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 会影响最初在类头中声明的变量吗?本质上,它会在类中是全局的吗?
感谢任何帮助。
【问题讨论】:
【参考方案1】:不,不会的。你总是需要$this->
告诉 PHP 你说的是类属性,而不是局部变量。
// Always assignment of a local variable.
$p_id = $stmt->fetch();
// Always assignment of a class property.
$this->p_id = $stmt->fetch();
【讨论】:
哈,即使我对其他所有变量都这样做了,但我什至没有注意到这一点。好吧,这回答了它并解决了未来的问题。谢谢。【参考方案2】:没有。这是您的函数的局部变量。如果你做了$this->$p_id = 'blah';
那么它会影响它。您在类中定义的变量是一个属性,因此必须使用 $this->....
访问/更改它,而您在函数中拥有的变量只是一个局部变量(您只需执行 @987654323 即可使用它@)。
所以,
$this->$p_id = '';//will alter the class property
和
$p_id = '';//will alter the local var defined/used in the function
【讨论】:
以上是关于在 PHP 类中建立变量范围?的主要内容,如果未能解决你的问题,请参考以下文章