Так построено большинство книг. Давайте использовать некоторые ключевые слова, не объясняя их вам ранее. Я тоже попался в эту ловушку. Мы рассмотрели ключевое слово self в последних двух статьях, не вдаваясь в подробности того, что оно означает.
Для статических членов класса мы не используем ключевое слово $this, мы используем self. Это и оператор разрешения области видимости позволяют нам получить доступ к статическим свойствам и методам. Ключевое слово self не требует знака доллара перед ним, в отличие от ключевого слова $this. $ подталкивается к статическому свойству, self::$property, тогда как при нестатическом доступе с ключевым словом $this доллар знак удален из имени свойства: $this-›property.
Чтобы получить доступ к нестатическому свойству или методу, вы добавляете оператор объекта к ключевому слову $this. Чтобы получить доступ к статическим свойствам или методам внутри класса, вы используете ключевое слово self, за которым следует разрешение области действия или оператор с двойным двоеточием.
Статические свойства и методы могут быть возвращены как статическими, так и нестатическими методами.
Подведение итогов. Взгляните на следующий класс, который мы рассмотрели в предыдущих статьях: Немецкая овчарка.
Мы посмотрели на self в нашем классе GermanShepherd в его нынешнем виде.
Здесь мы создали статическое свойство с именем $num_of_dogs_created, а под ним статический метод с именем update_num_of_dogs_created(). Оба они являются членами класса, и для доступа к ним вам не нужно создавать экземпляр объекта GermanShepherd.
Чтобы протестировать наш пример, мы создадим новый файл и добавим тот же код, что и в предыдущей статье.
Наш класс GermanShepherd включен и создан. Чтобы вызвать статические члены, нам не нужно их создавать, но как только мы это сделаем, у нас есть вызов в нашем конструкторе, который обновляет количество созданных собак.
Чтобы получить доступ к update_num_of_dogs_created() из нашего конструктора, мы должны использовать ключевое слово self, так как это статический метод. Мы не можем использовать $this. Мы должны использовать self, за которым следует оператор разрешения области действия и, наконец, имя статического метода.
Статический метод увеличивает статическое свойство $num_of_dogs_created, снова добавляя self к имени свойства: self::$num_of_dogs_created++;
Давайте создадим еще один нестатический метод: get_num_of_dogs_created_plus_two(). Это просто что-то случайное; не читайте слишком много в этом :). Все, что этот метод сделает, это, как вы уже догадались, вернет количество созданных собак и прибавит к нему 2.
Это просто для иллюстрации того, что вы можете вызывать нестатический метод, возвращающий статическое значение. Давайте позвоним и посмотрим, что мы получим.
Вывод должен выглядеть следующим образом:
Количество созданных экземпляров: 1
Обновить еще раз: 2
Количество созданных собак + 2: 4
Прогулка по коду:
- Мы вызываем статическое свойство $num_of_dogs_created, которое возвращает 1.
- Затем мы вызываем статический метод update_num_of_dogs_created(), который увеличивает значение статического свойства до 2.
- Статическое свойство $num_of_dogs_created вызывается снова, чтобы отобразить 2.
- Наконец, мы вызываем метод экземпляра, get_num_of_dogs_created_plus_two(), который возвращает значение статического свойства $num_of_dogs_created, увеличенное на 2.
Это все, что касается ключевого слова self .
Дино Кайич в настоящее время является руководителем отдела информационных технологий в компаниях LSBio (LifeSpan BioSciences, Inc.), Absolute Antibody, Kerafast, Everest BioTech, Nordic MUbio и Exalpha. Он также является генеральным директором MyAutoSystem. Он имеет более чем десятилетний опыт разработки программного обеспечения. У него есть B.S. в области компьютерных наук и несовершеннолетнего в области биологии. Его опыт включает в себя создание приложений для электронной коммерции на уровне предприятия, разработку программного обеспечения на основе исследований и содействие распространению знаний посредством письма.
Вы можете связаться с ним в LinkedIn, подписаться на него в Instagram, подписаться на его блог или подписаться на его публикацию на Medium.