PHP :: Константы, свойства и методы класса
- Свойства и методы класса
- Константы классов, служебное слово const
- Уровень доступа к свойствам и методам класса
- Доступ к свойствам, методам и константам класса
- Псевдопеременная $this
- Контроль типа аргументов методов класса
- Статические свойства и методы классов, ключевое слово static
- Обращение к объектам посредством переменных
Свойства и методы класса
В процессе создания класса в его теле могут создаваться константы, переменные или функции. Переменные, создаваемые внутри класса, принято называть свойствами, а функции методами этого класса (см. пример №1).
htmlCodes
<?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).
htmlCodes
<?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).
htmlCodes
<?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
- Вернуться к оглавлению учебника