2015-06-13 102 views
0

我创建具有可变的一类,因为你可以从下面的代码中看到, 设置类变量的值,我想访问PHP,如何从功能

$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]; 
     } 
    } 
?> 
+0

对于PHP类中的属性使用'var'是PHP 4的倒退,只保留向后兼容.....但建议您使用'public' /'protected' /'private'可见性....但是,由于'var'被视为'public','echo $ allen-> username;'是完全有效的 –

+0

如果你不想在实例化类后修改$ username,请设置合适的可见性为你的房产 –

+0

你确定这是你的真实代码,它的工作原理? 'getUserName()'是指'$ userName',而不是'$ this-> userName'? – alexis

回答

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', '[email protected]', 'username'); 

要检索的用户名,写上以下行:

$allen->getUsername(); 

在当前的构造函数的东西是不好的,监守我认为您的userName属性未正确初始化。

2

在php5中,构造函数不再以类命名。相反,它定义这样的:

public function __construct($firstName, $lastName, $email) 
{ 
    ///... 
} 

其次,目前还不清楚,你实际上是如何设置......你写的“这是混乱的,但它的作品”属性$this->userName,但我不明白这是怎么意思因为在调用preg_match()之后,$ userName 应该是数组。和保存数组没有任何意义......

另外:如果你真的定义构造函数(这是有道理的),里面的属性$this->userName,那么为什么getter方法getUserName()重新分析等性能?相反,一个普通的getter应该只返回属性值而没有太多解释。这应该没问题,因为你想在构造函数中设置值(可能目前不工作)。也许这只是以前尝试的剩余部分。我只是想提起它,因为它看起来很奇怪...

玩得开心!

+0

谢谢,是的,我正在尝试不同的方式来做到这一点,并迷惑自己。我编辑代码,修复数组部分,我想这可以在构造函数中解释,而不是每次运行代码,这个值都是需要的。 – aahhaa