<?php
class User
{
public $name;
public $age;
}
$user = new User; // создаем объект нашего класса
$user->name = 'Коля'; // записываем имя в свойство name
$user->age = 25; // записываем возраст в свойство age
echo $user->name; // выводим записанное имя
echo $user->age; // выводим записанный возраст
?>
2 Методы
<?php
class User
{
public $name;
public $age;
// Создаем метод:
public function show()
{
return '!!!';
}
}
$user = new User;
$user->name = 'Коля';
$user->age = 25;
// Вызовем наш метод:
echo $user->show(); // выведет '!!!'
?>
3 $this
Для того, чтобы обратиться к свойству класса
внутри метода этого класса, вместо имени объекта следует
писать специальную переменную $this.
<?php
class User
{
public $name;
public $age;
public function show()
{
// Возвращаем имя:
return $this->name;
}
}
$user = new User; // создаем объект класса
$user->name = 'Коля'; // записываем имя
$user->age = 25; // записываем возраст
// Вызываем наш метод:
echo $user->show(); // выведет 'Коля'
?>
4 Модификаторы доступа public private
Ключевое слово public указывает на то, что данные свойства
и методы доступны извне (вне кода класса). В противоположность public есть
ключевое слово private, которое указывает на то, что свойства
и методы недоступны извне.
<?php
class User
{
private $name;
private $age;
}
$user = new User;
// Выдаст ошибку, так как свойство name - private:
$user->name = 'Коля';
?>
5 Конструкторы.
Конструктор - это такой же метод класса, но он позволяет
сделать так, чтобы поля объекта заполнялись при его создании - в этом
случае мы никак не сможем забыть задать значения этих полей.
<?php
class User
{
public $name;
public $age;
// Конструктор объекта:
public function __construct($name, $age)
{
// запишем данные в свойство name
$this->name = $name;
// запишем данные в свойство age
$this->age = $age;
}
}
// создадим объект, сразу заполнив его данными
$user = new User('Коля', 25);
echo $user->name; // выведет 'Коля'
echo $user->age; // выведет 25
?>
6 Геттеры и Сеттеры
<?php
class User
{
public $name;
private $age; // объявим возраст приватным
// Метод для чтения возраста юзера:
public function getAge()
{
return $this->age;
}
// Метод для изменения возраста юзера:
public function setAge($age)
{
// Проверим возраст на корректность:
if ($this->isAgeCorrect($age)) {
$this->age = $age;
}
}
// Метод для проверки возраста:
private function isAgeCorrect($age)
{
return $age >= 18 and $age <= 60;
}
}
$user = new User;
// Установим возраст:
$user->setAge(50);
// Прочитаем новый возраст:
echo $user->getAge(); // выведет 50
?>
7 Наследование классов
<?php
class User
{
private $name;
private $age;
public function getName()
{
return $this->name;
}
public function setName($name)
{
$this->name = $name;
}
public function getAge()
{
return $this->age;
}
public function setAge($age)
{
$this->age = $age;
}
}
class Employee extends User
{
private $salary;
public function getSalary()
{
return $this->salary;
}
public function setSalary($salary)
{
$this->salary = $salary;
}
}
?>
8 Статические методы и Статические свойства
<?php
class Test
{
// Статический метод:
public static function method()
{
return '!!!';
}
}
// Чтобы обратиться к статистическому методу, не надо создавать объект
echo Test::method(); // выведет '!!!'
?>
Статистические свойства
<?php
class Test
{
// Статическое свойство:
public static $property;
}
Test::$property = 'test';
echo Test::$property; // выведет 'test'
?>
Класс , это чертеж, по которому сделали автомобиль
Автомобиль, сделанный по чертежу - это объект класса.
Структура синтаксиса:
<?php
class Car
{
// тут код, то есть PHP-чертеж автомобиля
}
?>
11 Абстрактные классы и интерфейсы
Абстрактные классы представляют собой классы, предназначенные для наследования от них. При этом объекты таких классов нельзя создать.
Объявление абстрактного класса:
<?php
abstract class User
{
}
?>
Абстрактные классы также могут содержать абстрактные методы.
Такие методы не должны иметь реализации, а нужны для того, чтобы указать, что такие методы должны быть у потомков.
Реализация абстрактного метода:
<?php
abstract class User
{
private $name;
public function getName()
{
return $this->name;
}
public function setName($name)
{
$this->name = $name;
}
// Абстрактный метод без тела:
abstract public function increaseRevenue($value);
}
?>
<?php
abstract class User
{
private $name;
public function getName()
{
return $this->name;
}
public function setName($name)
{
$this->name = $name;
}
abstract public function increaseRevenue($value);
}
class Employee extends User
{
private $salary;
public function getSalary()
{
return $this->salary;
}
public function setSalary($salary)
{
$this->salary = $salary;
}
}
?>
<?php
class Employee extends User
{
private $salary;
public function getSalary()
{
return $this->salary;
}
public function setSalary($salary)
{
$this->salary = $salary;
}
// Напишем реализацию метода:
public function increaseRevenue($value)
{
$this->salary = $this->salary + $value;
}
}
$employee = new Employee;
$employee->setName('Коля'); // установим имя
$employee->setSalary(1000); // установим зарплату
$employee->increaseRevenue(100); // увеличим зарплату
echo $employee->getSalary(); // выведет 1100
?>
13
Интерфейсы представляют собой классы, у которых все методы являются публичными и не имеющими реализации.
Пример итнерфейса:
<?php
interface Figure
{
public function getSquare();
public function getPerimeter();
}
?>
Интерфейс реализуется через служебное слово implements :
class Quadrate implements Figure
{
private $a;
public function __construct($a)
{
$this->a = $a;
}
public function getSquare()
{
return $this->a * $this->a;
}
public function getPerimeter()
{
return 4 * $this->a;
}
}
16 Полиморфизм
Полиморфизм — это способность обьекта использовать методы производного класса, который не существует на момент создания базового
17 Трейтыhttp://code.mu/ru/php/book/oop/traits/
Ранее мы уже проходили решение этой проблемы: вместо наследования использовать объекты одних классов внутри других.В PHP есть и другой способ. Он заключается в использовании трейтов.
Трейты подключаются через инструкцию use. и все его методы становятся доступными.
fgh
Tue, 01/26/2021 - 09:02
Permalink
ОПП
1 Cвойства
<?php class User { public $name; public $age; } $user = new User; // создаем объект нашего класса $user->name = 'Коля'; // записываем имя в свойство name $user->age = 25; // записываем возраст в свойство age echo $user->name; // выводим записанное имя echo $user->age; // выводим записанный возраст ?>2 Методы
<?php class User { public $name; public $age; // Создаем метод: public function show() { return '!!!'; } } $user = new User; $user->name = 'Коля'; $user->age = 25; // Вызовем наш метод: echo $user->show(); // выведет '!!!' ?>3 $this
<?php class User { public $name; public $age; public function show() { // Возвращаем имя: return $this->name; } } $user = new User; // создаем объект класса $user->name = 'Коля'; // записываем имя $user->age = 25; // записываем возраст // Вызываем наш метод: echo $user->show(); // выведет 'Коля' ?>4 Модификаторы доступа public private
<?php class User { private $name; private $age; } $user = new User; // Выдаст ошибку, так как свойство name - private: $user->name = 'Коля'; ?>5 Конструкторы.
<?php class User { public $name; public $age; // Конструктор объекта: public function __construct($name, $age) { // запишем данные в свойство name $this->name = $name; // запишем данные в свойство age $this->age = $age; } } // создадим объект, сразу заполнив его данными $user = new User('Коля', 25); echo $user->name; // выведет 'Коля' echo $user->age; // выведет 25 ?>6 Геттеры и Сеттеры
<?php class User { public $name; private $age; // объявим возраст приватным // Метод для чтения возраста юзера: public function getAge() { return $this->age; } // Метод для изменения возраста юзера: public function setAge($age) { // Проверим возраст на корректность: if ($this->isAgeCorrect($age)) { $this->age = $age; } } // Метод для проверки возраста: private function isAgeCorrect($age) { return $age >= 18 and $age <= 60; } } $user = new User; // Установим возраст: $user->setAge(50); // Прочитаем новый возраст: echo $user->getAge(); // выведет 50 ?>7 Наследование классов
<?php class User { private $name; private $age; public function getName() { return $this->name; } public function setName($name) { $this->name = $name; } public function getAge() { return $this->age; } public function setAge($age) { $this->age = $age; } } class Employee extends User { private $salary; public function getSalary() { return $this->salary; } public function setSalary($salary) { $this->salary = $salary; } } ?>8 Статические методы и Статические свойства
<?php class Test { // Статический метод: public static function method() { return '!!!'; } } // Чтобы обратиться к статистическому методу, не надо создавать объект echo Test::method(); // выведет '!!!' ?><?php class Test { // Статическое свойство: public static $property; } Test::$property = 'test'; echo Test::$property; // выведет 'test' ?>9 Переопределене метода
10 Классы и объекты.
Структура синтаксиса:
<?php class Car { // тут код, то есть PHP-чертеж автомобиля } ?>11 Абстрактные классы и интерфейсы
Абстрактные классы представляют собой классы, предназначенные для наследования от них. При этом объекты таких классов нельзя создать.
Объявление абстрактного класса:
<?php abstract class User { } ?>Реализация абстрактного метода:
<?php abstract class User { private $name; public function getName() { return $this->name; } public function setName($name) { $this->name = $name; } // Абстрактный метод без тела: abstract public function increaseRevenue($value); } ?><?php abstract class User { private $name; public function getName() { return $this->name; } public function setName($name) { $this->name = $name; } abstract public function increaseRevenue($value); } class Employee extends User { private $salary; public function getSalary() { return $this->salary; } public function setSalary($salary) { $this->salary = $salary; } } ?><?php class Employee extends User { private $salary; public function getSalary() { return $this->salary; } public function setSalary($salary) { $this->salary = $salary; } // Напишем реализацию метода: public function increaseRevenue($value) { $this->salary = $this->salary + $value; } } $employee = new Employee; $employee->setName('Коля'); // установим имя $employee->setSalary(1000); // установим зарплату $employee->increaseRevenue(100); // увеличим зарплату echo $employee->getSalary(); // выведет 1100 ?>13
Пример итнерфейса:
<?php interface Figure { public function getSquare(); public function getPerimeter(); } ?>Интерфейс реализуется через служебное слово implements :
class Quadrate implements Figure { private $a; public function __construct($a) { $this->a = $a; } public function getSquare() { return $this->a * $this->a; } public function getPerimeter() { return 4 * $this->a; } }14 Абстракция, инкапсуляция, наследование, полиморфизм
15 Магические методы http://code.mu/ru/php/book/oop/magic/__t...
16 Полиморфизм
Полиморфизм — это способность обьекта использовать методы производного класса, который не существует на момент создания базового
17 Трейты http://code.mu/ru/php/book/oop/traits/
Ранее мы уже проходили решение этой проблемы: вместо наследования использовать объекты одних классов внутри других.В PHP есть и другой способ. Он заключается в использовании трейтов.
Трейты подключаются через инструкцию use. и все его методы становятся доступными.
Источники:
1) http://code.mu/ru/php/book/oop/
https://habr.com/ru/post/37576/