2012-01-15 63 views
-1

我在Ubuntu 11.04上運行帶有PDT和Xdebugger(所有最新版本)和LAMP服務器的Eclipse Indigo。對象函數將不會在PHP中執行

調試時,對象函數(見下面的代碼)不會執行;調試器只是默認 - 變量窗口完全空白,它只是凍結。該頁面也不會加載,它只是處於加載狀態。

一切都很好,直到我開始調用對象上的函數。

對此提出建議?

下面的代碼:

<?php 
    require_once 'user.php'; 
    require_once 'fetcher.php'; 
    require_once 'inscriber.php'; 
    $uname=$_POST['regname']; 
    $upass=$_POST['regpass']; 
    $ufirst=$_POST['regfirst']; 
    $ulast=$_POST['reglast']; 
    $uemail=$_POST['regemail']; 
    $uphone=$_POST['regphone']; 

    $user = new User(); 
    $user->setUsername($uname); // THIS IS WHERE IT FREEZES UP 
    $user->setPassword($upass); 
    $user->setFirstname($ufirst); 
    $user->setLastname($ulast); 
    $user->setEmail($uemail); 
    $user->setPhone($uphone); 

    $inscriber = Inscriber::getInscriberInstance(); 
    $success = $inscriber->inscribeUser($user); 
    ?> 




<?php 
class User{ 

    private $username; 
    private $password; 
    private $userID; 
    private $firstname; 
    private $lastname; 
    private $phone; 
    private $email; 


    public function getUsername(){ 
     return $username; 
    } 

    public function setUsername($var){ 
     $this->$username = $var; 
    } 
    /// 

    public function getPassword(){ 
     return $password; 
    } 

    public function setPassword($var){ 
     $this->$password = $var; 
    } 
    /// 

    public function getUserID(){ 
     return $userID; 
    } 

    public function setUserID($var){ 
     $this->$userID = $var; 
    } 
    /// 

    public function getFirstname(){ 
     return $firstname; 
    } 

    public function setFirstname($var){ 
     $this->$firstname = $var; 
    } 
    /// 

    public function getLastname(){ 
     return $lastname; 
    } 

    public function setLastname($var){ 
     $this->$lastname = $var; 
    } 
    /// 

    public function getPhone(){ 
     return $phone; 
    } 

    public function setPhone($var){ 
     $this->$phone = $var; 
    } 
    /// 

    public function getEmail(){ 
     return $email; 
    } 

    public function setEmail($var){ 
     $this->$email = $var; 
    } 


} 
+0

看不到任何凍結原因。也不應該你的getters返回'return $ this-> someProperty'而不是'return $ a_variable' ??? – marcio 2012-01-15 19:58:49

回答

3
$this->$username = $var; 

這是一個 「動態屬性」。 PHP嘗試用變量的內容替換$username。該變量不存在,所以造成$this-> = $var,只不過沒有

$this->username = $var; 

(非靜態)屬性始終稱爲無$

附加在干將使用本地變量

public function getUsername(){ 
    return $username; 
} 

不知道,爲什麼你(至少嘗試)的制定者使用屬性,但在干將使用局部變量

public function getUsername(){ 
    return $this->username; 
} 

旁註:「對象函數」被稱爲「方法」

+0

謝謝。我實際上來自Java,所以不知道是否應用了方法術語,但是在Java中obv是方法。 – yoaquim 2012-01-15 20:06:56

+1

@paragoniq歡迎來到瘋狂的PHP世界:-)下面是熟悉PHP中的類和對象的好資源:http://php.net/manual/en/language.oop5.php – Quasdunk 2012-01-15 20:12:22

2

您的語法不完全正確(在這種情況下)。你想這樣做:

//... 

public function getUsername(){ 
    return $this->username; //added $this->... 
} 

public function setUsername($var){ 
    $this->username = $var; //no $-sign before 'username' 
} 


//... 

這也適用於所有其他功能。