2012-01-15 3 views
-1

Я запускаю Eclipse Indigo с PDT и Xdebugger (все последние версии) и LAMP-сервер на Ubuntu 11.04.Функция объекта не будет выполняться в 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

Не может быть никаких причин для его замораживания. Также не следует, чтобы ваши получатели возвращали 'return $ this-> someProperty' вместо' return $ a_variable' ??? – marcio

ответ

3
$this->$username = $var; 

Это "динамическое свойство". PHP пытается заменить $username содержимым переменной. Переменная не существует, так что в результате $this-> = $var просто не удается

$this->username = $var; 

(не статические) свойства всегда вызываются без $.

Дополнительно в добытчиками используются локальные переменные

public function getUsername(){ 
    return $username; 
} 

Не знаю, почему вы (по крайней мере попытаться) использовать свойства в сеттеров, но использовать локальные переменные в добытчиками

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

Sidenote: «функции объектов» называются «методами»

+0

Спасибо. Я на самом деле прихожу из Java, поэтому не знал, применяется ли терминология методов, но obv в Java - это методы. – yoaquim

+1

@paragoniq Добро пожаловать в сумасшедший мир PHP :-) Вот хороший источник для знакомства с классами и объектами в PHP: http://php.net/manual/en/language.oop5.php – Quasdunk

2

Ваш синтаксис не совсем корректен (в данном случае). Вы хотите сделать это:

//... 

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

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


//... 

Это касается и всех других функций.

Смежные вопросы