Изменить класс, приватную или публичную строку - PullRequest
1 голос
/ 18 октября 2011

Есть класс php, в котором мне нравится менять переменную, но я не могу этого сделать. Класс:

class ShopCart 
{
    private $maincurrency = 'USD';

    private function set_Currency() {
        $maincurrency = 'GBP';
        return $maincurrency;
    }
}

Это не работает. Даже если я сделаю это публично. Что я делаю не так?

Ответы [ 4 ]

4 голосов
/ 18 октября 2011

Вы должны использовать $this->maincurrency в теле вашего метода.Ваш текущий код создает и устанавливает локальную переменную, а не члена.

1 голос
/ 18 октября 2011

Вам нужно $this:

class ShopCart {
   private $maincurrency = 'USD';

   private function set_Currency() {
       $this->$maincurrency = 'GBP';
       return $this->$maincurrency;
   }
}

В противном случае вы создаете новую переменную, локальную для функции, и просто используете ее.

Руководство на самом деле говорит вамэто уже :

Внутри методов класса к свойствам, константам и методам можно получить доступ, используя форму $this->property (где property - имя свойства), если только нет доступаявляется статическим свойством в контексте метода статического класса, и в этом случае доступ к нему осуществляется с помощью формы self::$property.

Документация - ваш друг; проконсультируйтесь, прежде чем спрашивать здесь, пожалуйста .


Возможно, вы также захотите рассмотреть не return что-нибудь из сеттера, хотя это не тактебе.В этом есть свои преимущества, даже если в PHP это не совсем так.

0 голосов
/ 18 октября 2011

изменить $maincurrency = 'GBP'; на $this->maincurrency = 'GBP';, а также return $this->maincurrency;

0 голосов
/ 18 октября 2011
class ShopCart {
    private $maincurrency = 'USD';

    private function setCurrency() {
        $this->maincurrency = 'GBP';
    }

}
...