2015-06-13 25 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