在 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 类中建立变量范围?的主要内容,如果未能解决你的问题,请参考以下文章

成员变量类变量局部变量的区别

PHP 范围解析操作符 (::)

Python 类中的变量范围

Python 类中的变量范围

尽管在类中声明了变量,但无法在范围内找到

变量的有效范围