PHP: Статические методы и свойства

Методы и свойства можно также использовать, определяя их как статические данные класса. Термин статические означает, что мы можем получать доступ и к свойствам, и к методам в контексте класса, а не объекта. Определить статические данные класса можно с помощью ключевого слова static:

<?php

  class Test {
    static public $num = 1;
	
	static public function sayHi() {
	  echo 'Привет!';
	}
  }

?>

Статические методы сами не могут получать доступ ни к каким обычным свойствам класса, потому что такие свойства принадлежат объектам. Однако из статических методов можно обращаться к статическим свойствам.

Чтобы обратиться к статическому элементу класса нужно указать имя класса после которого указывается два двоеточия, а затем имя статического свойства или метода:

echo test::$num;
test::sayHi();

С этим синтаксисом вы познакомились в предыдущей главе. Там мы использовали конструкцию "::" в сочетании с ключевым словом parent, чтобы получить доступ к переопределённому методу родительского класса.

В коде класса можно использовать ключевое слово parent, чтобы получить доступ к суперклассу, не используя имя класса. Чтобы получить доступ к статическому методу или свойству из того же самого класса (не из дочернего), можно использовать ключевое слово self, оно используется для обращения к текущему классу. Поэтому из-за пределов класса мы обращаемся к данным с помощью имени класса:

test::$num;

А внутри класса можно использовать ключевое слово self:

<?php

  class Test {
    static public $num = 1;
	
	static public function sayHi() {
	  self::$num++;
	  echo 'Число: '. self::$num;
	}
  }

?>

Теперь разберем вопрос о том, зачем вообще использовать статические методы или свойства. У статических элементов есть ряд полезных характеристик. Они доступны из любой точки сценария. Статическое свойство доступно каждому экземпляру этого класса. Поэтому можно определить значения, которые должны быть доступны всем объектам данного типа. И наконец, сам факт, что не нужно иметь экземпляр класса для доступа к его статическому свойству или методу, позволит избежать создания экземпляров исключительно ради вызова простой функции. Давайте посмотрим как обращаться к методам и свойствам из объекта:

<?php

  class Test {
    static public $num = 1;
	
	static public function sayHi() {
	  self::$num++;
	  echo '<br>Число: '. self::$num;
	}
  }
  
  $obj = new Test;
  
  // доступ к статическому свойству из объекта
  echo $obj::$num;
  // вызов статического метода из объекта
  $obj::sayHi();
  // второй способ вызова статического метода
  $obj->sayHi();  // такой способ не рекомендуется использовать, чтобы не запутаться

?>
Копирование материалов с данного сайта возможно только с разрешения администрации сайта
и при указании прямой активной ссылки на источник.
2011-2016 © puzzleweb.ru

Реклама на сайте | puzinfo@puzzleweb.ru