PHP :: Константы, свойства и методы класса
- Свойства и методы класса
- Константы классов, служебное слово const
- Уровень доступа к свойствам и методам класса
- Доступ к свойствам, методам и константам класса
- Псевдопеременная $this
- Контроль типа аргументов методов класса
- Статические свойства и методы классов, ключевое слово static
- Обращение к объектам посредством переменных
Свойства и методы класса
В процессе создания класса в его теле могут создаваться константы, переменные или функции. Переменные, создаваемые внутри класса, принято называть свойствами, а функции методами этого класса (см. пример №1).
<?php //Объявили класс class my_class{ //Создаем константу const my_const='Строковая константа'; //Объявили, но неинициализировали свойство класса public $my_name; //Создаем метод класса, который устанавливает значение его свойства my_name function set_name($text){ //Ключевое слово $this ссылается на сам объект $this->my_name=$text; } } //Создали экземпляр класса, т.е. объект $person=new my_class(); //Установили значение его свойства my_name $person->set_name('Иван'); //Выведет строку 'Иван' echo $person->my_name.'<br>'; //Выведет 'Строковая константа' echo $person::my_const; ?>
Пример №1. Определение свойств и методов класса
Константы классов, служебное слово const
Константы внутри классов создаются при помощи служебного слова const, после которого указывается имя константы и присваивается ее значение. Опять же, перед именем константы знак доллара $ не ставится, а значением константы может быть только неизменяемое (скалярное) выражение, например, число, массив или строка, определенная при помощи синтаксиса nowdoc, но не переменная, результат вызова функции или что-то подобное.
Уровень доступа к свойствам и методам класса
Перед именем свойств и методов обычно указывается одно из следующих ключевых слов (модификаторов), определяющих уровень доступа к нему:
- public – доступ к свойствам и методам класса разрешен отовсюду;
- protected – доступ к свойствам и методам класса разрешен из наследуемых и родительских классов;
- private – доступ к свойствам и методам класса разрешен только внутри самого класса.
Методы, в которых уровень доступа при помощи перечисленных модификаторов не указан, определяются как public.
В случае инициализации свойства класса во время его объявления разрешается применять только константные выражения, т.е они должны быть окончательно вычислены еще во время компиляции, а не зависеть от данных программы во время ее выполнения. При этом инициализировать свойства внутри класса не обязательно, т.к. если значение не указать, свойству по умолчанию будет присвоено значение NULL.
Доступ к свойствам, методам и константам класса
После того, как какой-либо объект класса будет создан, свойства и методы класса становятся доступны для использования через указание имени объекта, объектного оператора ->, а также имени свойства или метода. Однако следует помнить, что при обращении к свойству объекта знак доллара $ перед ним нужно опускать, а при вызове метода объекта нужно указывать круглые скобки. Доступ к константам, после создания экземпляра класса, отличается от доступа к свойствам или методам и осуществляется при помощи оператора двойного двоеточия :: (см. пример №1).
Псевдопеременная $this
Для обращения изнутри текущего метода к другим свойствам или методам внутри этого же класса используется специальная псевдопеременная $this, которая представляет собой ссылку на текущий объект, в контексте которого вызывается данный метод.
Псевдопеременная $this всегда указывает на текущий объект, поэтому присвоение ей какого-либо значения недопустимо.
Контроль типа аргументов методов класса
По умолчанию методы могут принимать аргументы любого типа. Однако иногда возникает необходимость сделать так, чтобы метод мог принимать в качестве аргументов, например, только массивы или же экземпляры какого-то определенного класса. В таких случаях следует просто указать разрешенный тип данных перед именем аргумента (см. пример №2).
<?php class my_class{ //Первый аргумент метода должен быть экземпляром класса other_class function test(other_class $arg){ echo $arg->my_var; } //Первый аргумент должен быть массивом, второй любой доступный function test_array(array $arg_1,$arg_2){ echo $arg_1[0].' '.$arg_2; } } //Создаем еще один класс class other_class{ //и определяем в нем свойство public $my_var = 'Привет!'.'<br>'; } //Создаем экземпляр класса my_class $obj=new my_class(); //Создаем экземпляр класса other_class $other_obj=new other_class(); //Выведет строку 'Привет' $obj->test($other_obj); //Выведет ошибку, т.к. передан недопустимый //тип данных (число вместо экземпляра класса) //$obj->test(7); //Определяем массив $arr=['a','b','c']; //Выведет строку 'a 5' $obj->test_array($arr,5); //Выведет ошибку, первый аргумент должен быть массивом //$obj->test_array(5,$arr); ?>
Пример №2. Осуществление контроля типа аргументов
Список разрешенных типов, а также особенности применения контроля типов можно посмотреть в разделе, посвященному функциям (перейти).
Статические свойства и методы классов,
ключевое слово static
Отметим, что в PHP имеется возможность обращаться к свойствам и методам класса без объявления его экземпляров, т.е. без создания объектов соответствующего типа. Для этого они должны быть объявлены статическими при помощи ключевого слова static (см. пример №3).
<?php //Объявили класс class my_class{ //Объявили статическое свойство класса static public $my_text='Текст '; //Создаем статический метод класса static function get_func(){ //Выведет строку 'Функция' echo 'Функция'.'<br>'; //$this->my_name='text'; - $this недопустимо в статических методах } } //Выведет строку 'Текст' без создания объекта echo my_class::$my_text.'<br>'; //Присвоили имя класса переменной $a='my_class'; //Также выведет строку 'Текст' echo $a::$my_text.'<br>'; //Выведет строку 'Функция' my_class::get_func(); //Также выведет строку 'Функция' $a::get_func(); //Создали экземпляр класса, т.е. объект $person=new my_class(); //В обоих случаях выведет 'Функция', т.к. статические //методы доступны в объектах при помощи оператора '->' $person::get_func(); $person->get_func(); //Выведет строку 'Текст' echo $person::$my_text; //Выведет ошибку!!! Статические свойства недоступны //в объектах при помощи объектного оператора '->' //echo $person->my_text; ?>
Пример №3. Использование ключевого слова static
Доступ к статическим свойствам и методам класса, как и в случае с константами класса, осуществляется при помощи оператора двойного двоеточия ::. Однако при доступе к статическому свойству нужно указывать перед его идентификатором знак доллара, иначе интерпретатор будет пытаться получить доступ не к статическому свойству, а к константе класса. Кроме того, обращение к статическим свойствам при помощи объектного оператора -> невозможно. Что касается статических методов, то при обращении к ним при помощи объектов разрешается использовать как двойное двоеточие ::, так и объектный оператор ->, хотя мы будем всегда использовать только двойное двоеточие (см. пример №3).
Как и в случае с константами, значением статического свойства может быть только неизменяемое (скалярное) выражение, например, число, массив или строка, определенная при помощи синтаксиса nowdoc, но не переменная, результат вызова функции или что-то подобное. Кроме того, поскольку статические методы могут вызываться без создания экземпляра класса, то псевдопеременная $this не доступна внутри метода, объявленного статическим, даже в случае, когда он вызывается изнутри объекта.
Обращение к объектам посредством переменных
Также отметим, что в PHP разрешается ссылаться на класс посредством переменных (наподобие концепции переменных функций). Соответственно, значение переменной в таком случае не должно являться ключевым словом PHP (см. пример №3).
Быстрый переход к другим страницам
- Классы и объекты в PHP
- Константы, свойства и методы класса в PHP
- Наследование в PHP
- Вернуться к оглавлению учебника