X   Сообщение сайта
(Сообщение закроется через 3 секунды)



 

Здравствуйте, гость ( Вход | Регистрация )

2 страниц V   1 2 >
Открыть тему
Добавить ответ в эту тему
> Как понять ООП?
WoWeb
WoWeb
Topic Starter сообщение 16.10.2019, 14:40; Ответить: WoWeb
Сообщение #1


Завсегдатай
*****

Группа: Active User
Сообщений: 635
Регистрация: 18.8.2015
Поблагодарили: 250 раз
Репутация:   47  


Пишу на PHP.

Всем привет, подскажите пожалуйста где найти понятные объяснения использования ООП, идеально с примерами.

Пишу процедурным стилем но хочу перейти на ООП, но нигде не могу найти адекватного пояснения с примерами чем использование класса лучше обычной функции, какая разница между self и $this, зачем создавать объект класса если можно его использовать сразу как функцию.

Буду благодарен за ссылки где можно почитать/посмотреть примеры кода с пояснениями, или может есть такие кто занимается репетиторством и за денюжку по скайпу сможет объяснить тонкости.

Заранее благодарю за любую помощь.

Сообщение отредактировал WoWeb - 16.10.2019, 14:40


--------------------


Поблагодарили: (1)
0
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Silverspam
Silverspam
сообщение 16.10.2019, 15:43; Ответить: Silverspam
Сообщение #2


Злобный SEO Злодей
*******

Группа: Super Moderator
Сообщений: 8027
Регистрация: 14.11.2009
Из: C Урала
Поблагодарили: 9311 раз
Репутация:   537  


недавно у geekbrains.ru видел что якобы бесплатно
попробуйте записаться, вдруг они сразу уроки дают выгрузить, раз бесплатно
не знаю поможет или нет, но вдруг )


--------------------


Поблагодарили: (1)
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
x64
x64
сообщение 16.10.2019, 16:24; Ответить: x64
Сообщение #3


F.A.L.L.O.U.T.
*******

Группа: Super Moderator
Сообщений: 3812
Регистрация: 30.6.2011
Из: Железнодорожный (Балашиха)
Поблагодарили: 3200 раз
Репутация:   314  


Да ничем не лучше. Просто идеология, которой отдали главенствующую роль. Никлаус Вирт, создатель ЯП Pascal и ещё пачки языков, и Эдсгер Вибе Дейкстра, основатель структурного программирования и создатель семафоров (тех самых, что синхронизируют код в многопоточном режиме), считают ООП скорее уродством. Структурный подход, при должном умении, оказывается не хуже.
К сожалению, с примерами туго. Просто потому, что когда они небольшие, и в самом деле непонятно, накой надо ООП. Но, стоит взять пример побольше, в голову приходят мысли «что за бред? почему так? кто это придумал и как его использовать?».

Разница между self и $this, на самом деле, много проще, чем кажется.
К статическим методам/свойствам (функциям/переменным) обращаемся через self.
К тем, которые самостоятельно используются в каждом экземпляре класса — $this.

Код
class Epidersia {
    public $cnt = 0;
    public static $cntAll = 0;
    private $myName = '';
    
    public function __construct($name) {
        $this->myName = $name;
    }
    
    public function init() {
        ++self::$cntAll;
        ++$this->cnt;
    }
    
    public function getName() {
        return $this->myName;
    }
}

$e1 = new Epidersia('epi1');
$e1->init();
echo $e1->cnt; // 1

$e2 = new Epidersia('epi2');
$e2->init();
echo $e2->cnt; // 1

echo $e1::$cntAll; // 2
echo $e2::$cntAll; // 2


Здесь $cntAll едино для всех экземпляров. Можно даже сделать так (добавить после кода выше):

Код
echo ++Epidersia::$cntAll; // 3



Полноценно использовать как функцию можно статические методы/свойства. В нашем примере — $cntAll.
Инициализация класса:

Код
$e1 = new Epidersia;


заставляет выделить память под используемые переменные, задать им значения по умолчанию (если есть). Дальнейшая работа ведётся с конкретным экземпляром, каждый из которых работает со своей областью памяти (исключения — статические методы/свойства, ну и константы конечно же):

Код
echo $e1->getName(); // epi1
echo $e2->getName(); // epi2


Рассматриваемый пример плох с той точки зрения, что не несёт какой-либо полезной нагрузки. Код ради кода.

Чтобы посмотреть принцип в деле, можно накачать разных скриптов. Но чтобы понять — придётся начать писа́ть с использованием ООП.
ООП позволяет меньше засорять пространство имён. Можно написать 10 функций и обращаться к ним как обычно. А можно завернуть их в класс, тогда эти функции не будут висеть в глобальной области видимости и вероятность конфликта станет ниже. С появлением неймспейсов в PHP 5.3 эта особенность отошла на задний план, раньше же, с помощью классов, организовывали своеобразные «области видимости».


Вообще, тема огромная. Лучше задайте конкретные вопросы когда столкнётесь с трудностями. Ибо с нуля постигать концепцию ООП — тот ещё гемор.


--------------------


Поблагодарили: (2)
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
WoWeb
WoWeb
Topic Starter сообщение 16.10.2019, 16:27; Ответить: WoWeb
Сообщение #4


Завсегдатай
*****

Группа: Active User
Сообщений: 635
Регистрация: 18.8.2015
Поблагодарили: 250 раз
Репутация:   47  


x64, Благодарю, буду грызть гранит науки)))


--------------------
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
KOLIAN
KOLIAN
сообщение 16.10.2019, 19:10; Ответить: KOLIAN
Сообщение #5


Участник
***

Группа: User
Сообщений: 121
Регистрация: 9.7.2015
Поблагодарили: 19 раз
Репутация:   3  


Если книга, то PHP. Объекты, шаблоны и методики программирования (Мэт Зандстра)
Если видео, https://www.youtube.com/user/TheLukesky1/playlists Victor Zinchenko хорошо обьясняет все.


--------------------


Поблагодарили: (1)
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
WoWeb
WoWeb
Topic Starter сообщение 16.10.2019, 20:37; Ответить: WoWeb
Сообщение #6


Завсегдатай
*****

Группа: Active User
Сообщений: 635
Регистрация: 18.8.2015
Поблагодарили: 250 раз
Репутация:   47  


KOLIAN,
Вот пример класса который на кодил)) подскажите может что коряво написал?

Код
<?php
class Cache{
    protected $id = 0;
    protected $path;
    protected $ext  = '.cache';
    protected $cachFile;
    public $cacheTime;
    public $nocache = false;

    function __construct() {
        $this->path = $_SERVER['DOCUMENT_ROOT'].'/cache/';
        $this->cachFile = $this->path.md5($id).$this->ext;
        if(isset($_GET['cache'])) $this->nocache = true;
    }

    function clearById($id){
        if($id != 0 && ctype_digit($id)) unlink($this->path.md5($id).$this->ext);
    }
    
    function clearAll(){
        ini_set('max_execution_time', 0);
        set_time_limit(0);
        $files = glob($this->path.'*');
        foreach($files as $file){
            if(is_file($file)){
                unlink($file);
            }
        }
    }    

    function create($id){
        ini_set('zlib.output_compression_level', 9);
        ob_start('ob_gzhandler');
        $cached = fopen($this->cachFile, 'w');
        fwrite($cached, ob_get_contents());
        fclose($cached);
        ob_end_flush();    
    }

    function check($id,$cacheTime){
        if (!file_exists($this->cachFile) || (time() - filemtime($this->cachFile)) > $cacheTime || $this->nocache == true) {
            return false;
        }
        return true;
    }
}
?>


--------------------


Поблагодарили: (1)
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
x64
x64
сообщение 16.10.2019, 23:14; Ответить: x64
Сообщение #7


F.A.L.L.O.U.T.
*******

Группа: Super Moderator
Сообщений: 3812
Регистрация: 30.6.2011
Из: Железнодорожный (Балашиха)
Поблагодарили: 3200 раз
Репутация:   314  


Цитата(WoWeb @ 16.10.2019, 19:37) *
function __construct() {
$this->path = $_SERVER['DOCUMENT_ROOT'].'/cache/';
$this->cachFile = $this->path.md5($id).$this->ext;
if(isset($_GET['cache'])) $this->nocache = true;
}

Что здесь есть $id? (:

Цитата(WoWeb @ 16.10.2019, 19:37) *
public $cacheTime;

Объявлена, но не используется.


--------------------
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
WoWeb
WoWeb
Topic Starter сообщение 17.10.2019, 9:57; Ответить: WoWeb
Сообщение #8


Завсегдатай
*****

Группа: Active User
Сообщений: 635
Регистрация: 18.8.2015
Поблагодарили: 250 раз
Репутация:   47  


x64,
$cachTime - это время жизни кеша будет, там из базы будет доставать значение.
$id - это id страницы для кеширования, использоваться будет так: $Cache->create($id);

Сообщение отредактировал WoWeb - 17.10.2019, 9:59


--------------------
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
miketomlin
miketomlin
сообщение 17.10.2019, 18:44; Ответить: miketomlin
Сообщение #9


Новичок
*

Группа: User
Сообщений: 41
Регистрация: 12.11.2013
Поблагодарили: 3 раза
Репутация:   0  


WoWeb, не понимаю, в чем проблема с подбором инфы по ООП. Оно сейчас везде, почти. Вот по процедурке действительно не хватает материалов с описанием «техник программирования».

Помимо пространства имен, о чем уже было сказано, можно отметить основные фишки ООП, в частности инкапсуляцию данных между разными функциями-методами одного объекта (на процедурке в пыхе, насколько знаю, такое можно сделать только внутри одной ф-ции, а для нескольких нужно либо использовать специальные/общие сеттеры/геттеры, либо сами эти ф-ции «инкапсулировать» в одну). Вообще считается, что ООП более удобно при коллективных разработках, коих подавляющее большинство, т.к. позволяет структурировать код средствами самого языка. Естественно, это не избавляет автоматом от б/г/кодинга. Да, много серьезных программеров относится к ООП весьма скептически, что не мешает им юзать его по полной. Да, и не забивай совсем на глоб. область видимости/использование обычных «хелперов», иначе рискуешь присоединиться к огромной толпе товарищей, страдающих «ООП головного мозга».


--------------------
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Gerga
Gerga
сообщение 19.10.2019, 14:01; Ответить: Gerga
Сообщение #10


Бывалый
****

Группа: User
Сообщений: 304
Регистрация: 15.2.2013
Из: Одесса
Поблагодарили: 201 раз
Репутация:   50  


Цитата(WoWeb @ 16.10.2019, 13:40) *
Буду благодарен за ссылки где можно почитать/посмотреть примеры кода с пояснениями

Книга "Объектно-ориентированное мышление" от Мэтт Вайсфельд.

Сообщение отредактировал Gerga - 19.10.2019, 14:02


--------------------
Разработка на WordPress -> Верстка/Разработка/Модификация тем и плагинов WordPress.


Поблагодарили: (1)
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
2 страниц V   1 2 >
Открыть тему
Добавить ответ в эту тему
Быстрый ответ
4 чел. читают эту тему (гостей: 4, скрытых пользователей: 0)
Пользователей: 0


Свернуть

> Похожие темы

  Тема Ответов Автор Просмотров Последний ответ
Открытая тема (нет новых ответов) Как выгодней закинуть наличных денег в криптовалюту?
25 Webranger 2418 Сегодня, 0:11
автор: Emtec
Горячая тема (нет новых ответов) Как выучить WordPress?
36 Кетрин2020 2312 Вчера, 23:06
автор: rest2011
Открытая тема (нет новых ответов) Как за такие деньги в Минюст идут?
27 тр
6 kirch 129 17.11.2019, 17:20
автор: x64
Открытая тема (нет новых ответов) Индивидуальный инвестиционный счёт: как и для чего его открыть?
passivdohod.ru - сайт про заработок, инвестиции, пассивный доход
4 Totleben 242 16.11.2019, 11:58
автор: Totleben
Открытая тема (нет новых ответов) Как распознать музыку с потока на смартфоне?
11 rownong27 685 15.11.2019, 18:51
автор: Santorini


 



RSS Текстовая версия Сейчас: 19.11.2019, 10:12
Дизайн