Область видимости переменных класса в PHP

198
06 февраля 2018, 10:11

Есть такой php-файл с классом:

class.php:

class classTest
{
    private $password;
    private function showName($foo)
    {
        $password= "QWERTY";
        $bar = $password. " == " . $foo;
        return $bar;
    }
    private function hideName($foo1)
    {
        $password= "QWERTY";
        $bar1 = $foo1 . " !!!! " . $password;
        return $bar1;
    }
}

Он делает всякую ерунду, но это не важно.

Смысл в том, что в обоих функциях используется переменная $password и ее содержимое идентично.

Скажите, КАК обозначить ее ОДИН РАЗ где-то в классе таким образом, чтобы она была видна только в функциях этого класса, но не была видна в php-файле, в котором инклюдится данный файл с классом?

Не могу понять, где в каких случаях ставится public, где private... Голову сломал, прошу просто показать рабочий и правильный пример, чтобы хотя бы понять, как оно должно работать.

Answer 1

Вы в функциях showName и hideName вводите локальную переменную $password, которая не доступна остальным функциям класса.

Для того, чтобы использовать поле $password объекта во всех его функциях нужно:

  1. Объявить переменную в классе (что Вы правильно сделали)
  2. Обращаться к этой переменной через объект $this класса (что Вы сделали неправильно)

Вот правильный вариант:

class classTest
{
    private $password;
    private function showName($foo)
    {
        $this->password= "QWERTY";
        $bar = $this->password. " == " . $foo;
        return $bar;
    }
    private function hideName($foo1)
    {
        $this->password= "QWERTY";
        $bar1 = $foo1 . " !!!! " . $this->password;
       return $bar1;
    }
}

Модификатор private означает, что эта обращаться к этой переменной можно будет только внутри нашего класса (в нашем случае это функции класса showName и hideName).

Т.е. если мы создадит объект класса

$a = new classTest();

то у нас не получится посмотреть и изменить его переменную вне класса

Если же мы ставим public, мы можем изменять и получать переменную класса вне функций этого класса:

echo $a->password;     // Выводим пароль
$a->password = '12345' // Меняем пароль
Answer 2

Обозначай Private. А вообще-то мануал по PHP еще не закрыли :) Там много примеров и все очень подробно расписано. Пройдись по примерам и все станет ясно, это ведь основы, которые желательно знать наизусть для разработчика http://php.net/manual/ru/language.oop5.visibility.php

READ ALSO
Равномерно распределить коллекцию

Равномерно распределить коллекцию

Всем привет ребята, нужна помощь в распределении коллекцийLaravel 5

190
php вывод текста

php вывод текста

Возможно ли приблизительно так, вывести текст:

169
Где хранить общие настройки сайта? (Laravel)

Где хранить общие настройки сайта? (Laravel)

Всем приветЕсть интернет-магазин на laravel

255
Возврат из PHP в AJAX

Возврат из PHP в AJAX

Отправляю сообщение на почтуСообщение отправляется и приходит, но в ajax не срабатывает success (нет уведомления об успешности) - бесконечно крутится...

257