belarusweb.net
© Петр Романовский Минск, 2016-2018.



belarusweb.net

Основы создания сайтов...
PHP >>>

1.6.2. Определение констант, свойств и методов класса

Свойства и методы класса

В процессе создания класса в его теле могут создаваться константы, переменные или функции. Переменные, создаваемые внутри класса, принято называть свойствами, а функции методами этого класса (см. пример 6.2).

<?php
class my_class{       			//Объявили класс 
  const my_const='Строковая константа';   	//Создаем константу
  public $my_name;   			//Объявили, но неинициализировали свойство класса
 
  function set_name($text){   //Создаем метод класса, который устанавливает 
										//значение его свойства my_name 
    $this->my_name=$text;     //Ключевое слово $this ссылается на сам объект 
  } 
 }
 
$person=new my_class();       //Создали экземпляр класса, т.е. объект
$person->set_name('Иван');    //Установили значение его свойства my_name  
echo $person->my_name.'<br>'; //Выведет строку 'Иван' 
echo $person::my_const;       //Выведет 'Строковая константа'
?>

Пример 6.2. Определение свойств и методов класса

Константы классов, служебное слово const

Константы внутри классов создаются при помощи служебного слова const, после которого указывается имя константы и присваивается ее значение. Опять же, перед именем константы знак доллара '$' не ставится, а значением константы может быть только неизменяемое (скалярное) выражение, например, число, массив или строка, определенная при помощи синтаксиса nowdoc, но не переменная, результат вызова функции или что-то подобное.

Уровень доступа к свойствам и методам класса

Перед именем свойств и методов обычно указывается одно из следующих ключевых слов (модификаторов), определяющих уровень доступа к нему:

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

В случае инициализации свойства класса во время его объявления разрешается применять только константные выражения, т.е они должны быть окончательно вычислены еще во время компиляции, а не зависеть от данных программы во время ее выполнения. При этом инициализировать свойства внутри класса не обязательно, т.к. если значение не указать, свойству по умолчанию будет присвоено значение NULL.

Доступ к свойствам, методам и константам класса

После того, как какой-либо объект класса будет создан, свойства и методы класса становятся доступны для использования через указание имени объекта, объектного оператора '->', а также имени свойства или метода. Однако следует помнить, что при обращении к свойству объекта знак доллара '$' перед ним нужно опускать, а при вызове метода объекта нужно указывать круглые скобки. Доступ к константам, после создания экземпляра класса, отличается от доступа к свойствам или методам и осуществляется при помощи оператора двойного двоеточия '::' (см. пример 6.2).

Псевдопеременная $this

Для обращения изнутри текущего метода к другим свойствам или методам внутри этого же класса используется специальная псевдопеременная $this, которая представляет собой ссылку на текущий объект, в контексте которого вызывается данный метод.

Псевдопеременная $this всегда указывает на текущий объект, поэтому присвоение ей какого-либо значения недопустимо.

Контроль типа аргументов методов класса

По умолчанию методы могут принимать аргументы любого типа. Однако иногда возникает необходимость сделать так, чтобы метод мог принимать в качестве аргументов, например, только массивы или же экземпляры какого-то определенного класса. В таких случаях следует просто указать разрешенный тип данных перед именем аргумента (см. пример 6.3).

<?php
class my_class{
   function test(other_class $arg){				//Первый аргумент метода должен быть
															//экземпляром класса other_class
      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>';	//и определяем в нем свойство
}

$obj=new my_class();  			 			//Создаем экземпляр класса my_class
$other_obj=new other_class(); 			//Создаем экземпляр класса other_class

$obj->test($other_obj);						//Выведет строку 'Привет'
//$obj->test(7);								//Выведет ошибку, т.к. передан недопустимый 								 
												//тип данных (число вместо экземпляра класса)
$arr=['a','b','c'];			//Определяем массив
$obj->test_array($arr,5);	//Выведет строку 'a 5'
//$obj->test_array(5,$arr);//Выведет ошибку, первый аргумент должен быть массивом
?>

Пример 6.3. Осуществление контроля типа аргументов

Список разрешенных типов, а также особенности применения контроля типов можно посмотреть в разделе, посвященному функциям (перейти).

Статические свойства и методы классов,
ключевое слово static

Отметим, что в PHP имеется возможность обращаться к свойствам и методам класса без объявления его экземпляров, т.е. без создания объектов соответствующего типа. Для этого они должны быть объявлены статическими при помощи ключевого слова static (см. пример 6.4).

<?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;  //Выведет ошибку!!! Статические свойства недоступны 
								  //в объектах при помощи объектного оператора '->' 
?>

Пример 6.4. Использование ключевого слова static

Доступ к статическим свойствам и методам класса, как и в случае с константами класса, осуществляется при помощи оператора двойного двоеточия '::'. Однако при доступе к статическому свойству нужно указывать перед его идентификатором знак доллара, иначе интерпретатор будет пытаться получить доступ не к статическому свойству, а к константе класса. Кроме того, обращение к статическим свойствам при помощи объектного оператора '->' невозможно. Что касается статических методов, то при обращении к ним при помощи объектов разрешается использовать как двойное двоеточие '::', так и объектный оператор '->', хотя мы будем всегда использовать только двойное двоеточие (см. пример 6.4).

Как и в случае с константами, значением статического свойства может быть только неизменяемое (скалярное) выражение, например, число, массив или строка, определенная при помощи синтаксиса nowdoc, но не переменная, результат вызова функции или что-то подобное. Кроме того, поскольку статические методы могут вызываться без создания экземпляра класса, то псевдопеременная $this не доступна внутри метода, объявленного статическим, даже в случае, когда он вызывается изнутри объекта.

Обращение к объектам посредством переменных

Также отметим, что в PHP разрешается ссылаться на класс посредством переменных (наподобие концепции переменных функций). Соответственно, значение переменной в таком случае не должно являться ключевым словом PHP (см. пример 6.4).

Контрольные вопросы и задания

  1. Что называют свойствами и методами класса?
  2. Как создаются константы классов?
  3. Перечислите существующие в PHP уровни доступа к переменным и методам классов?
  4. Каким образом осуществляется доступ к свойствам, методам и константам класса после создания его экземпляров?
  5. Для чего используется псевдопеременная $this?
  6. Как и для чего создаются статические свойства и методы?

Быстрый переход к другим страницам

Словарь новых английских слов

one-off [wʌnˈɒf] – одноразовый.
partial [ˈpɑːʃ(ə)l] – частичный.
class [klɑːs] – класс.
new [njuː] – новый.
empty [ˈempti] – пустой.
constant [ˈkɒnst(ə)nt] – константа.
person [ˈpəːs(ə)n] – личность, персона.
object [ˈɒbdʒɪkt] – объект.
method [ˈmɛθəd] – метод.
property [ˈprɒpəti] – свойство.
public [ˈpʌblɪk] – открытый, общественный.
protected [prəˈtektɪd] – защищенный.
private [ˈprʌɪvət] – закрытый, частный.
this [ðɪs] – это, этот.
static [ˈstatɪk] – статичный, неподвижный.
extend [ɪkˈstɛnd] – расширять.
self [self] – собственный.
parent [ˈpɛːr(ə)nt] – родитель, предок.
exit [ˈeksɪt] – выход, выйти.
nest [nest] – вставлять один предмет в другой.
final [ˈfʌɪn(ə)l] – заключительный, окончательный.
construct [kənˈstrʌkt] – создавать, конструировать.
destruct [dɪˈstrʌkt] – разрушать, уничтожать.
descendant [dɪˈsɛnd(ə)nt] – потомок.
abstract [ˈæbstrækt] – абстрактный, отвлеченный.
interface [ˈɪntəfeɪs] – интерфейс, область контакта.
implement [ˈɪmplɪment] – осуществлять, реализовывать.
trait [treɪt] – особенность, черта.
use [ˈjuːs] – употреблять, использовать.
instead [ɪnˈstɛd] – вместо, взамен.
as [æz] – как.
anonymous [əˈnɒnɪməs] – безымянный, анонимный.
clone [kləʊn] – клон, двойник.
set [set] – устанавливать.
unset [ʌnˈsɛt] – удалять.
get [ɡet] – получать.
call [kɔːl] – вызывать, звать.

Комментарии (0)
Петр Романовский
1. Приветствуются комментарии, которые содержат дополнения к материалу текущей страницы, а также ваши ответы на вопросы других пользователей.
2. Если вам что-то непонятно - спрашивайте, не забывая написать, что именно и с какого места.
Показаны все комментарии
Чтобы оставить свой комментарий, авторизуйтесь, пожалуйста!    
     
belarusweb.net © Петр Романовский, Минск, 2016-2018.
Связаться с автором
Наверх