PHP,如何从函数中设置类变量值

时间:2015-06-13 19:13:18

标签: php class constructor

我正在创建一个带变量的类,如下面的代码所示, 我想访问

$allen = new guest(...); echo $allen->userName;

相反,我必须使用此

$allen->getUserName();

但由于在创建课程后用户名不会改变,有没有办法做到这一点?

<?php 
    class guest {

        var $firstName;
        var $lastName; 
        var $email;
        var $userName;

        function guest($firstName, $lastName, $email) {
            $this->firstName = $firstName; 
            $this->lastName = $lastName; 
            $this->userName = getUserName();  // option 1 
            $this->userName = $this->getUserName(); // option 2

            preg_match('/^.*(?=(@))/i', $this->email, $userName);
            $this->userName = $userName[0];  // this is messy but work


        }
        function getUserName() {
            preg_match('/^.*(?=(@))/i', $this->email, $userName);
            return $userName[0];
        }
    }
?>   

2 个答案:

答案 0 :(得分:2)

在php5中,构造函数不再以类命名。而是像这样定义它:

> cbind(dx,x=x[-(1:k)],rse)
              dx           x  rse
[1,] 0.004472136 0.004472136 0.01
[2,] 0.008944272 0.013416408 0.02
[3,] 0.013416408 0.026832816 0.03
[4,] 0.017888544 0.044721360 0.04
[5,] 0.022360680 0.067082039 0.05

接下来,目前还不清楚你是如何实际设置属性public function __construct($firstName, $lastName, $email) { ///... } ...你写的#34;这很麻烦,但它有效&#34;但是我不知道这是怎么回事意思是工作,因为$ userName 在调用$this->userName后应该是一个数组。保存阵列没有任何意义......

此外:如果您确实在构造函数中定义了属性preg_match()(这有意义),那么为什么getter方法$this->userName会重新解析其他属性?相反,普通的getter应该只返回属性值而不需要太多的解释。这应该没问题,因为你想在构造函数中设置值(这可能当前不起作用)。也许这只是以前尝试的遗留物。我只是想提一下,因为它看起来很奇怪......

玩得开心!

答案 1 :(得分:1)

要拒绝直接访问您的类属性,您可以将其定义为private。通过这样做,像$allen->userName这样的构造会抛出错误。这也称为封装。

首先确保正确初始化类对象。在PHP中,您应该使用__constructor函数定义构造函数。这是一个例子:

       class Guest {
    protected $lastName;
    protected $email;
    protected $lastName;
    protected $userName;

    public function __construct($firstName, $lastName, $email, $userName){
        $this->firstName = $firstName;
        $this->lastName = $lastName;
        $this->email = $email;
        $this->userName = $userName;
    }
    public function getUsername(){
        return $this->userName;
    }      
}

构造函数接收4个参数$firstName, $lastName, $email, $userName。要创建此类的对象,您可以执行以下代码:

$allen = new Guest('John', 'Doe', 'some.email@email.com', 'username');

要检索用户名,请写下以下一行:

$allen->getUsername();

在你当前的构造函数中,有些东西很糟糕,因为我认为你的userName属性没有正确初始化。