Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- /*
- //ООП в PHP
- //---------------------------------
- //Создание класса и обьектов класса
- class User
- {
- public $name = 'User'; // свойство со значением по умолчанию
- public $email; //свойство
- }
- $user = new User(); //обьект(экземпляр или сущьность) класса
- echo $user->name.'<br/>';
- echo $user->email.'<br/>';
- $user->email = 'abc@mail.ru';
- echo $user->email.'<br/>';
- $user_2 = new User();
- $user_2->name = 'user2';
- $user_2->email = 'user2@mail.ru';
- echo $user_2->name.'<br/>';
- echo $user_2->email.'<br/>';
- //---------------------------------
- //Конструктор, деструктор и методы
- class User
- {
- public $name = 'User';
- public $email;
- public function __construct($name = false,$email = false){ //конструктор
- if ($name) $this->name = $name; //обращаемся к свойству класса
- if ($email) $this->email = $email;
- }
- public function getName(){ //метод
- return $this->name;
- }
- public function getEmail(){ //метод
- return $this->email;
- }
- public function setName($name){ //метод
- $this->name = $name;
- }
- public function setEmail($email){ //метод
- $this->email = $email;
- }
- public function __destruct(){ //деструктор - выполняется при удалении или завершении работа php
- echo "Удаляем обьект";
- }
- }
- $user = new User();
- echo $user->name.'<br/>';
- echo $user->email.'<br/>';
- echo $user->getName().'<br/>';
- echo $user->getEmail().'<br/>';
- $user->setName('michle');
- $user->setEmail('123@mail.ru');
- echo $user->getName().'<br/>';
- echo $user->getEmail().'<br/>';
- //---------------------------------
- //Модификаторы доступа
- //public - можем обратиться откуда угодно
- //private - только внутри класса
- // protected - можем обратиться внутри класса и из производных классов(дочерних)
- class User
- {
- public $id = 0;
- private $name = 'User';
- public $email;
- protected $text;
- public function __construct($name = false,$email = false){ //конструктор
- if ($name) $this->name = $name; //обращаемся к свойству класса
- if ($email) $this->email = $email;
- $this->id = $this->getID();
- }
- public function getName(){ //метод
- return $this->name;
- }
- public function getEmail(){ //метод
- return $this->email;
- }
- public function setName($name){ //метод
- $this->name = $name;
- }
- public function setEmail($email){ //метод
- $this->email = $email;
- }
- public function __destruct(){ //деструктор - выполняется при удалении или завершении работа php
- echo "Удаляем обьект";
- }
- public function getID(){
- return uniqid();
- }
- }
- $user = new User();
- echo $user->id;
- //---------------------------------
- //Статические свойства и методы(у всех обьектов одинаковое значение, принадлежат не обьекту а классу)
- class Math {
- public const PI = 3.14;
- private static $counter = 0;
- public static function sin($x){
- self::$counter++;
- return sin($x);
- }
- public static function pi2(){
- self::$counter++;
- return self::PI**2; //обращение к текущему классу
- // parent::__construct - обращение к родителю
- }
- public static function getCounter(){
- return self::$counter;
- }
- }
- echo Math::sin(5).'<br>';
- echo Math::sin(5).'<br>';
- echo Math::sin(5).'<br>';
- echo Math::sin(5).'<br>';
- echo Math::getCounter().'<br>';
- // echo Math::$counter.'<br>';
- echo Math::pi2().'<br>';
- //----пример с php
- class Foo {
- public static function aStaticMethod() {
- return '1234';
- }
- }
- echo Foo::aStaticMethod();
- $classname = 'Foo'; //статический метод НЕ вызовится черех ->
- $classname = new Foo(); //статический метод вызовится черех ->
- echo $classname::aStaticMethod();
- echo $classname->aStaticMethod();
- //-----
- //---------------------------------
- //Магические методы
- class Test{
- public $x = 5;
- }
- class Request{
- private $data;
- public $t;
- public function __construct(Test $t){
- $this->data=$_REQUEST;
- $this->t = $t;
- }
- public function __get($name){ //будет выполнен при чтении данных из недоступных свойств.
- if (isset($this->data[$name])) {
- return $this->data[$name];
- }
- return null;
- }
- public function __set($name,$value){ //будет выполнен при записи данных в недоступные свойства.
- $this->data[$name] = $value;
- }
- public function __isset($name){ //будет выполнен при использовании isset() или empty() на недоступных свойствах.
- return isset($this->data[$name]);
- }
- public function __toString(){ //Метод __toString() позволяет классу решать, как он должен реагировать при преобразовании в строку. Например, что вывести при выполнении echo $obj;.
- $s = '';
- foreach ($this->data as $key => $value) {
- $s.= "$key = $value;";
- }
- return $s;
- }
- public function __clone(){ //После завершения клонирования, если метод __clone() определен, тогда будет вызываться метод __clone() вновь созданного объекта, для возможного изменения всех необходимых свойств.
- $this->t = clone $this->t; //если этого не сделать, то при клонировании обьекта и при измении своиств внутреннего обьекта, измениться и сам класс внутренного обьекта
- }
- public function __call($method,$args){ //запускается при вызове недоступных методов в контексте объект.
- echo "$method не существует";
- echo "Переданные параметры: ".print_r($args,true);
- }
- public function __unset($name){ //Метод __unset() будет выполнен при вызове unset() на недоступном свойстве.
- unset($this->data[$name]);
- }
- }
- $req=new Request(new Test());
- echo $req->a.'<br>';
- $req->a = 5;
- echo $req->a.'<br>';
- echo(isset($req->a)).'<br>';
- echo($req).'<br>';
- $req2 = $req; //req2 - жесткая ссылка на обьект $req, если изменить какое либо свойство у $req то и у $req2 измениться
- $req2 = clone $req; // - $req2 новый обьект класса
- echo $req2->a; //выведет 15
- echo "<br>-------<br>";
- echo $req->t->x.'<br>';// выведет 5
- echo $req->donthaveit(123,'123dfg');
- unset ($req->a);
- echo $req->a;
- //---------------------------------
- //Cериализация объектов
- class User{
- public $email;
- public $password;
- public $lt;
- public function __construct($email,$password){
- $this->email = $email;
- $this->password = $password;
- $this->lt = time();
- }
- public function __sleep(){ //Функция serialize() проверяет, присутствует ли в вашем классе метод с магическим именем __sleep(). Если это так, то этот метод выполняется до любой операции сериализации.
- return['email','lt'];
- }
- public function __wakeup(){ //С другой стороны, функция unserialize() проверяет наличие метода с магическим именем __wakeup(). Если она имеется, эта функция может восстанавливать любые ресурсы, которые может иметь объект.
- $this->lt = time();
- }
- }
- $user = new User('abc@mail.ru','123');
- print_r($user);
- echo "<br>";
- sleep(2);
- $str = file_get_contents($user->email);
- $u = unserialize($str);
- print_r($u);
- $str = serialize($user);
- echo($str);
- file_put_contents($user->email, $str);
- //---------------------------------
- //Механизм наследования и абстрактные классы
- abstract class Shape{ //абстрактный класс нельзя вызвать, создать обьект
- protected $x;
- protected $y;
- abstract public function draw(); //данный метод обязательно должен быть реализован в дочерних классах
- }
- class Circle extends Shape{ //дочерний класс от класса Shape, берем все свойства и методоты родительскоего класса
- private $r;
- public function __construct($x,$y,$r){
- $this->x = $x;
- $this->y = $y;
- $this->r = $r;
- }
- public function draw(){
- echo "рисуем".$this->x.' и '.$this->y;
- echo "радиус ". $this->r;
- }
- }
- class Rectangle extends Shape{
- private $w;
- private $h;
- public function __construct($x,$y,$w,$h){
- $this->x = $x;
- $this->y = $y;
- $this->w = $w;
- $this->h = $h;
- }
- public function draw(){
- echo "рисуем от класса Rectangle".$this->x.' и '.$this->y;
- echo "шиирина ".$this->w.' высота '.$this->h;
- }
- }
- $circle = new Circle(5,8,10);
- $rect = new Rectangle(20,20,40,10);
- $r = new Rectangle(210,210,440,105);
- echo($circle->draw()).'<br>';
- echo($rect->draw());
- $list = [$circle,$rect,$r];
- foreach ($list as $value) {
- if ($value instanceof Circle){}//ператор instanceof используется для определения того, является ли текущий объект экземпляром указанного класса.
- $value->draw();
- echo "<br>";
- }
- //магические методы, описанные в родительском элементе также наследуются в дочерние
- //---------------------------------
- //Интерфейсы php7
- //тот функцианал, который гарантированно будет у наших классов
- interface Draw{
- public function draw(); //все методы должны быть реализованы, за исключение абстрактного класса
- }
- interface test2{
- public function test2();
- }
- interface test3{
- public function test3();
- }
- abstract class Shape implements Draw,test2,test3{
- protected $x;
- protected $y;
- }
- //---------------------------------
- //Трейты
- //можно использовать много в одном классе
- // нельзя создавать обьекты от трейдов
- // можно реализовать методы(в интерфейсах нельзя)
- trait Id{
- protected $id;
- public function getId(){
- return $this->id;
- }
- public function setId($id){
- $this->id = $id;
- }
- }
- trait Name{
- protected $name;
- public function getName(){
- return $this->name;
- }
- public function setName($name){
- $this->name = $name;
- }
- }
- class User
- {
- use Id,Name;
- }
- $user = new User();
- $user->setId(4);
- $user->setName('denko');
- echo $user->getId().'<br>';
- echo $user->getName().'<br>';
- //---------------------------------
- //Пространство имен
- use ru\sitename\User;//использование класса который назодится по такому классу имен
- use ru\google\User as google_user;
- require_once 'a.php';
- require_once 'b.php';
- $user =new ru\sitename\User(); //обращение по пространству имен
- $user->name = 'denko';
- echo $user->name ;
- $user =new ru\google\User(); //обращение по пространству имен
- $user->id = 10;
- echo $user->id ;
- $user =new User(); //обращение по к подключенному классу
- $user->name = 'test';
- echo $user->name ;
- $user =new google_user(); //обращение к подключенному классу
- $user->id = 15;
- echo $user->id ;
- */
- //---------------------------------
- //Импортирование и автозагрузка классов и файлов
- // function __autoload($classname){
- // require_once $_SERVER['DOCUMENT_ROOT']."/4_1++/lib/{$classname}_class.php";
- // }
- set_include_path(get_include_path().PATH_SEPARATOR.'lib'.PATH_SEPARATOR.'lib2'.PATH_SEPARATOR.'lib3');// Устанавливает значение настройки конфигурации include_path ->Указывает список директорий, в которых функции require, include, fopen(), file(), readfile() и file_get_contents() ищут файлы.
- //get_include_path() - получение скписка директорий
- // PATH_SEPARATOR - разделитель
- spl_autoload_extensions('_class.php'); //Регистрация и вывод расширений файлов для spl_autoload
- //производит поиск в директориях get_include_path()
- spl_autoload_register(); //Регистрирует заданную функцию в качестве реализации метода __autoload()
- // echo get_include_path();
- $user = new User();
- echo $user->name.'<br>';
- echo $user->email.'<br>';
- $user = new Point();
- echo $user->x.'<br>';
- echo $user->y.'<br>';
- ?>
Add Comment
Please, Sign In to add comment