Php class public method

Php class public method

С помощью специальных модификаторов можно задать область видимости для свойств и методов класса. В PHP есть три таких модификатора:

  • public : к свойствам и методам, объявленным с данным модификатором, можно обращаться из внешнего кода и из любой части программы
  • protected : свойства и методы с данным модификатором доступны из текущего класса, а также из классов-наследников
  • private : свойства и методы с данным модификатором доступны только из текущего класса

Рассмотрим на примере. Например, у нас есть следующий класс:

class Person < private $privateA ="private"; public $publicA = "public"; protected $protectedA = "protected"; private function getPrivateMethod() < echo "private method 
"; > protected function getProtectedMethod() < echo "protected method
"; > public function getPublicMethod() < echo "public method
"; > function test() < $this->getPrivateMethod(); $this->getProtectedMethod(); $this->getPublicMethod(); echo "$this->privateA
"; echo "$this->protectedA
"; echo "$this->publicA
"; > >

Класс определяет три свойства и три метода с разными модификаторами доступа. Из любого метода этого класса мы можем обратиться к любом методу и любому свойству. Если метод не имеет модификатора доступа, то по умолчанию его видимость аналогична модификатору public .

Теперь создадим класс, производный от класса Person:

class Employee extends Person < function test() < //echo $this->privateA; // нельзя, так как privateA - private в классе-родителе echo $this->protectedA; echo $this->publicA; //$this->getPrivateMethod(); // нельзя, так как private в классе-родителе $this->getProtectedMethod(); $this->getPublicMethod(); > >

Классу-наследнику доступны все свойства и методы с модификаторами public и protected , но недоступны методы и свойства с модификатором private .

Теперь рассмотрим использование класса Person во внешнем коде:

$person = new Person; // $person->getPrivateMethod(); // недоступно, так как private // $person->getProtectedMethod(); // недоступно, так как protected $person->getPublicMethod(); // echo $person->privateA; // недоступно, так как private // echo $person->protectedA; // недоступно, так как protected echo $person->publicA;

При использовании объектов данного класса нам доступны только публичные методы и свойства, а свойства и методы с модификаторами private и protected не доступны.

Читайте также:  Лихие братки 90 х сервер css v34

Доступ к методам и свойствам объекта

Стоит отметить, что в PHP в классе можно обращаться в переменным и методам с модификаторами private и protected объекта этого же класса:

class Account< private $sum = 0; function __construct($sum)< $this->sum = $sum; > function getSumFrom($otherAccount, $money) < $otherAccount ->sum -= $money; $this -> sum += $money; > function prinSum()< echo "На счете $this->sum у.е.
"; > > $acc1 = new Account(100); $acc2 = new Account(400); $acc1->getSumFrom($acc2, 200); $acc1->prinSum(); // На счете 300 у.е.

Класс Account представляет условный класс банковского счета. В приватной переменной $sum хранится сумма на счете.

В методе getSumFrom() в качестве параметра получаем объект этого же класса Account и сумму перевода. И поскольку объект представляет тот же класс Account, то мы можем обратиться к его свойствам и методам с модификаторами private и protected:

И таким образом, выполнить условный денежный перевод с счета на счет.

Источник

Модификаторы доступа public и private в PHP

Ключевое слово public , которое мы пишем перед именами указывает на то, что данные свойства и методы доступны извне (вне кода класса). В противоположность ключевое слово private , которое указывает на то, что свойства и методы недоступны извне.

Зачем это надо? К примеру, у нас есть класс, реализующий некоторый функционал. Есть набор методов, но часть этих методов является вспомогательными.

Будет лучше, чтобы эти вспомогательные методы нельзя было использовать вне нашего класса. В этом случае мы легко сможем поредактировать код этих вспомогательных методов и будем уверенными в том, что их снаружи никто не использует и ничего страшного не случится.

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

Читайте также:  Визуальный редактор php кода

То же самое касается и свойств. Некоторые свойства выполняют чисто вспомогательную функцию и не должны быть доступны вне класса, иначе мы их можем случайно поменять снаружи и сломать работу нашего кода.

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

Давайте попробуем — объявим свойства $name и $age приватными и попытаемся обратиться к ним снаружи — мы сразу увидим ошибку:

Применим на практике

Давайте посмотрим на класс User , который мы сделали в предыдущем уроке:

= 18 and $age // Метод для изменения возраста юзера: public function setAge($age) < // Проверим возраст на корректность: if ($this->isAgeCorrect($age)) < $this->age = $age; > > // Метод для добавления к возрасту: public function addAge($years) < $newAge = $this->age + $years; // вычислим новый возраст // Проверим возраст на корректность: if ($this->isAgeCorrect($newAge)) < $this->age = $newAge; // обновим, если новый возраст прошел проверку > > > ?>

Как мы знаем, метод isAgeCorrect является вспомогательным и мы не планируем использовать его снаружи класса. Логично сделать его приватным, чтобы другой программист, который будет потом работать над нашим проектом (или мы сами через некоторое время) случайно не использовал этот метод снаружи класса.

= 18 and $age // Метод для изменения возраста юзера: public function setAge($age) < // Проверим возраст на корректность: if ($this->isAgeCorrect($age)) < $this->age = $age; > > // Метод для добавления к возрасту: public function addAge($years) < $newAge = $this->age + $years; // вычислим новый возраст // Проверим возраст на корректность: if ($this->isAgeCorrect($newAge)) < $this->age = $newAge; // обновим, если новый возраст прошел проверку > > > ?>

Обычно все приватные методы размещают в конце класса, давайте перенесем наш метод в самый низ:

isAgeCorrect($age)) < $this->age = $age; > > // Метод для добавления к возрасту: public function addAge($years) < $newAge = $this->age + $years; // вычислим новый возраст // Проверим возраст на корректность: if ($this->isAgeCorrect($newAge)) < $this->age = $newAge; // обновим, если новый возраст прошел проверку > > // Метод для проверки возраста: private function isAgeCorrect($age) < return $age >= 18 and $age > ?>

Читайте также:  About session and cookies in php

Существует специальное правило: если вы делаете новый метод и не знаете, сделать его публичным или приватным, — делайте приватным. В дальнейшем, если он понадобится снаружи, — вы поменяете его на публичный.

Еще раз резюмируем: слова public и private не нужны для реализации логики программы, а нужны для того, чтобы уберечь программистов от ошибок.

Не подсматривая в мой код внесите такие же правки в класс User .

Попробуйте вызвать метод isAgeCorrect снаружи класса. Убедитесь, что это будет вызывать ошибку.

Сделайте класс Student со свойствами $name и $course (курс студента, от 1 -го до 5 -го).

В классе Student сделайте public метод transferToNextCourse , который будет переводить студента на следующий курс.

Выполните в методе transferToNextCourse проверку на то, что следующий курс не больше 5 .

Вынесите проверку курса в отдельный private метод isCourseCorrect .

Источник

Оцените статью