2013-12-19 4 views
1

У меня есть класс UserFavorite, расширяющий пользователя. Когда я создаю новый объект с помощью конструкторов конструкторов классов, нельзя устанавливать свойства.PHP OOP Не удается установить частные свойства

Constructor:

public function __construct($username, $tabId, $favName, $favUrl = null, $favPosition = null, $favComment = null) { 
    parent::__construct($username); 
    $this->tabId = $this->setTabId($tabId); 
    $this->favName = $this->setFavName($favName); 
    $this->favUrl = $this->setFavUrl($favUrl); 
    $this->favPosition = $this->setFavPosition($favPosition); 
    if ($favComment) { 
     $this->favComment = $this->setFavComment($favComment); 
    } 
} 

сеттер:

public function setFavUrl($favUrl) { 
     $url = filter_var($favUrl, FILTER_VALIDATE_URL); 
     if (!$url) { 
      echo $this->showError(...); 
      exit; 
     } 
     echo $url; // THIS LOGS THE URL 
     $this->favUrl = $url; 
    } 

Я creatirng новый экземпляр $fav = new UserFavorite($user->getUsername(), 1, 'favorite', 'http://abv.bg', 5, 'mamatisiebalo');

И когда я напечатать $fav я получаю:

favorite<pre>UserFavorite Object 
(
    [favName:UserFavorite:private] => 
    [tabId:UserFavorite:private] => 
    [favUrl:UserFavorite:private] => 
    [favPosition:UserFavorite:private] => 
    [favComment:UserFavorite:private] => 
    [_favId:UserFavorite:private] => 
    [username:protected] => myUserName 
    [_userId:protected] => 1 
) 

Любые идеи?

+2

Если эти свойства являются частной собственностью в классе 'User', то вы не можете получить к ним доступ из класса' UserFavourites' ... это то, что 'private' означает –

+1

' $ this-> tabId = $ this- > setTabId ($ tabId); 'Почему вы устанавливаете его вручную и вызываете сеттер? Он должен быть либо '$ this-> setTabId ($ tabId);' OR '$ this-> tabId = $ tabId;' – Jessica

+1

+1 к тому, что сказал Марк Бейкер. Если вы расширяете класс и хотите получить доступ к родительским переменным, используйте 'protected' вместо' private'. – Crackertastic

ответ

5

Вы устанавливаете $this->favUrl в функцию setter, а затем перезаписываете его, назначая результат функции setter той же переменной.

Если вы изменяете

$this->favUrl = $this->setFavUrl($favUrl); 

Для

$this->setFavUrl($favUrl); 

Вы должны быть в порядке.

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