html.okpython.net
HTML и CSS для начинающих

PHP :: Константы, свойства и методы класса

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

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

PHP Результат 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).

PHP Результат 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).

PHP Результат 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).

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