@Keymorfist

Правильно ли я понимаю параметр $this?

Добрый день/вечер. Я начал изучать PHP и OOP столкнулся недопониманием самого себя. Вроде бы понимаю и не понимаю переменную $this.

Пожалуйста, посмотрите простой код и скажите, правильно ли я понимаю параметр $this?
class worker {
    
    //Устанавливаем значения переменных по умолчанию
    public $name        = "Имя и Фамилия";
    public $balance     = "Баланс";
    public $savings     = "Зарплата";
    public $profession  = "Профессия";
    public $income      = "Доход";
    public $despense    = "Расход";
    
    /*Создаем конструкцию для объекта*/
    
    //В конструкцию устанавливаем параметры, которые нужно изменить при обращении к методу
    function __construct ($name, $balance, $savings, $profession, $income, $despense) {
        
        //Обращаемся к переменной $name и присваиваем стандартное значение из класса worker
        $this->name         = $name;
        $this->balance      = $balance;
        $this->savings      = $savings;
        $this->profession   = $profession;
        $this->income       = $income;
        $this->despense     = $despense;
    }
}

/*Создаем переменную $worker2 и присваиваем ему объект worker
 *Указываем данные для параметров*/
$worker2 = new worker("Призрак", 5000, 535000, "Спецагент ЦРУ", 44223493, 20330);

//Вывод данных 
echo "Имя: ".$worker2->name."<br>";
echo "Баланс: ".$worker2->balance." руб.<br>";
echo "Зарплата: ".$worker2->savings." руб.<br>";
echo "Профессия: ".$worker2->profession."<br>";
echo "Доход: ".$worker2->income." руб.<br>";
echo "Расход: ".$worker2->despense." руб.<br>";
  • Вопрос задан
  • 274 просмотра
Решения вопроса 3
DmitriyEntelis
@DmitriyEntelis
Думаю за деньги
$this указывает на текущий экземпляр класса.
Код $this->name = $name; присваивает параметру name у текущего экземпляра объекта, значение $name.
Визуально код выглядит правильно, разве что лучше сразу приучаться называть вещи своими именами - __construct это конструктор а не конструкция)

Ну и на всякий случай php.net/manual/ru/language.oop5.basic.php
Ответ написан
Wolfnsex
@Wolfnsex Куратор тега PHP
Если не хочешь быть первым - не вставай в очередь!
Через $this можно/нужно обращаться к переменным и методам внутри класса. Тут всё верно.

Но, один момент меня смущает. Зачем задавать переменным значения по умолчанию, если в конструкторе объекта они всё равно безусловно переопределятся... в этом нет особого смысла, за исключением крайне редких ситуаций, но я думаю, это не тот случай.
Ответ написан
lxfr
@lxfr
Пока с $this все верно. Прочтите разницу между self: и $this. Станет понятнее.
Ко всему хочу добавить следующее - вот так делать не надо:
function ....($name, $balance, $savings, $profession, $income, $despense)

Я так понял вы создаете объект с множеством свойств и устанавливаете их через перечисление в методе. Так делать не стоит - через множественное перечисление в методе. А если завтра свойств будет 10000?
Вот так достаточно:
$object = new Object();
$object->param = "value";
....
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы