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



 

Здравствуйте, гость (

| Вход | Регистрация )

> Как понять ООП?
WoWeb
WoWeb
Topic Starter сообщение 16.10.2019, 14:40; Ответить: WoWeb
Сообщение #1


Пишу на PHP.

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

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

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

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

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


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


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


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


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


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


Да ничем не лучше. Просто идеология, которой отдали главенствующую роль. Никлаус Вирт, создатель ЯП 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


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


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


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


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


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


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


Цитата(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


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

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


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


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

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


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


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

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

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


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


Свернуть

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

  Тема Ответов Автор Просмотров Последний ответ
Открытая тема (нет новых ответов) Большие ставки для кликов в Я.Директ. Как удешевить?
2 rownong27 1124 26.3.2024, 14:13
автор: knezevolk
Открытая тема (нет новых ответов) Как вы бросили работу и перешли на заработок с сайтов?
12 uahomka 2295 25.3.2024, 6:52
автор: Skyworker
Открытая тема (нет новых ответов) Как отозвать банковский платеж фрилансеру?
28 metvekot 3920 25.3.2024, 6:34
автор: Skyworker
Открытая тема (нет новых ответов) Как вывести деньги в Украине с заблокированного Юмани ?
23 freeax 3646 24.3.2024, 20:55
автор: Liudmila
Открытая тема (нет новых ответов) Через какой браузер и как можно найти в кэшэ браузера видео
10 Room 1942 23.3.2024, 7:41
автор: Room


 



RSS Текстовая версия Сейчас: 29.3.2024, 11:34
Дизайн