О нас
Разработчикам
Заметки
Переводчик
Транслитератор
Сравнить текст
Генератор пароля
Ip и информация
Декодировать JSON
Локация
О нас
Разработчикам
Заметки
Переводчик
Транслитератор
Сравнить текст
Генератор пароля
Ip и информация
Декодировать JSON
Локация
Oop php
us.content
<?php /* При обращение к классу в самом классе пишем $this Методы классов это функциии */ class Index extends Page { // Класс Index наследует класс Page public function __construct($t, $s) { /* Переопределение метода. Метод construct наследует метод construct из класса Page, далее добавляю $s */ parent::__construct($t); $this->slide = $s; } /* Метод обычно что-то возвращает с помощью return */ } class Poly { public $ob; public function get_ob(Page $var) { // (Page $var) эта запись означает в классе Page переменная var $this->ob[] = $var; } // В статичном методе создать экземпляр класса public static function test() { $self = new self(); } } /* Сначала создать класс, затем методы, ниже создать объекты */ $poly = new poly(); /* новый объект poly или $poly = new $pol; */ $poly->get(); /* вызываем метод */ class Page { // Свойство класса public $header = 'HEADER'; public $content; public $footer; // Метод класса public function view_hearder($var1, $var2) { echo $this->hearder.'<br>'.$var1.$var2; } function __autoload($var) { // Подключение множество файлов из папки classes include 'classes/' . $var . '.php'; // В переменную var попадает имя класса, объект которого создаём } class Page { const NUMBER = 1; // Костанта — не изменяемая, знак $ не ставим и вместо $this пишем self::NUMBER; public $a = 'public'; // Открытый спецификатор доступа protected $_b = 'protected'; // Закрытый спецификатор доступа, только из класса и наследников, в название нижние подчёркивание private $_c = 'private'; // Закрытый спецификатор доступа, только внутри класса, в название нижние подчёркивание } $page = new Page(); // Создать объяект echo Page::NUMBER; // Вывести NUMBER interface IUser { // Абстракные методы, которые только наследуются и переопределяются public function get_user(); } abstract class AUser implements IUser { // Обязательно наследование interface } // Абстрактный класс - нельзя создать объект // Абстрактный метод - в классе наследнике необходимо создать этот метод // Если наследуются два класса, то пишем через запятую class User { // final финальные классы не наследуют public $name; public function __construct($name){ $this->name = $name; } public function __clone() { // Вызывается в момент клонированя объектов echo 'CLONE OBJECT'; } final protected function can() { // Финальные методы запрещенно переопределять в дочерних классах // code } } $user = new User('Victor'); if ($User instanceof User) { // Принадлежит ли объект к классу if ($User instanceof Customer) { // или к родителям класса echo 'is Customer'; } else { echo 'is User'; } } $user2 clone $user; // Клонирование объектов echo $user2->name; // Магические методы __construct() // метод при создание класса __destruct() // метод при удаление класса __clone() // метод при клонирование класса __set($name, $value) // метод не существуещего свойства класса __get($name) // метод выводит не существуещее свойства класса __call() // метод при обращение к не существующим методам __tostring() // метод приводит объект в строку, можно вывести через echo // В объекте создать любое свойство и получать его, для этого в классе или в трайте пишем: protected $data; public function __set($name, $value) { $this->data[$name] = $value; } public function __get($name) { return $this->data[$name] ?? null; } // Задаём и получаем свойство $user = new \app\classes\User(); $user->display = 'New'; dump($user->display); Позднее статическое связывание - вызов метода в контексте текущего класса. Вместо self использовать static, тогда в классе наследнике можно переопределить свойство (переменную). // Документация /** * * @return int Сумма двух чисел. * * @property \App\Config $config Свойства у объектов или переменные * * @deprecated Устаревший метод. */ Инкапсуляция. Скрытие внутреннего состояния и функций объекта и предоставление доступа только через открытый набор функций. Инкапсуляция это сокрытие данных и функциональности от клиентского кода. Наследование. Возможность создания новых абстракций на основе существующих. Полиморфизм. Возможность реализации наследуемых свойств или методов отличающимися способами в рамках множества абстракций. Полиморфизм это поддержка нескольких реализаций на основе общего интерфейса. Абстракция. Моделирование требуемых атрибутов и взаимодействий сущностей в виде классов для определения абстрактного представления системы. private, protected, public - модификаторы видимости. Namespace - это механизм использование класса через пространство имен Магические методы - это специальные методы, которые переопределяют действие PHP по умолчанию, когда над объектом выполняются определённые действия. construct(), destruct(), call(), callStatic(), get(), set(), isset(), unset(), sleep(), wakeup(), serialize(), unserialize(), toString(), invoke(), set_state(), clone() и __debugInfo() Трейт - это механизм обеспечения повторного использования кода в языках с поддержкой только одиночного наследования, таких как PHP. Трейт предназначен для уменьшения некоторых ограничений одиночного наследования, позволяя разработчику повторно использовать наборы методов свободно, в нескольких независимых классах и реализованных с использованием разных архитектур построения классов. При использовании нескольких трейтов с одинаковыми методами, возникает конфликт. Разрешение конфликта производится с помощью оператора insteadOf. Так же если у дочернего класса есть такой же переопределенный метод как и у базового, и стаким же именем есть у трейта, порядок вызова следующий: вызов дочернего метода, вызов метода трейта, вызов у родительского класса. Доступны частные методы trait в классе. Можно компоновать traits в trait. Абстракный класс - нельзя создать объект. Абстракный метод - обязательно реализовать в классам наследниках. Абстрактный класс похож на обычный, но отличается тем, что может содержать абстрактные методы — методы без реализации, и нельзя создать экземпляр абстрактного класса. Так же интерфейсы имплементируются, а от абстрактных классов наследуются. Абстрактный класс может содержать частный метод. Интерфейс - не имеет реализации, это контракт на который мы подписываем класс, множественное наследование. Абстарктный тип данных, который определяет контракты по которым обязуются реализовать методы в классах, которые их имплементируют. На практике интерфейсы содержат определения функций (то есть описание их сигнатур) без их реализации. Позднее статическое связывание PHP реализует функцию, называемую позднее статическое связывание, которая может быть использована для того, чтобы получить ссылку на вызываемый класс в контексте статического наследования. static - для конкретного класса, т.е. для потомков. self - внутри класса.
Список