Помощник
Как понять ООП? |
WoWeb
|
Сообщение
#1
|
||
|
|
||
|
|||
Silverspam |
16.10.2019, 15:43;
Ответить: Silverspam
Сообщение
#2
|
|
недавно у geekbrains.ru видел что якобы бесплатно
попробуйте записаться, вдруг они сразу уроки дают выгрузить, раз бесплатно не знаю поможет или нет, но вдруг ) -------------------- |
|
|
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 эта особенность отошла на задний план, раньше же, с помощью классов, организовывали своеобразные «области видимости». Вообще, тема огромная. Лучше задайте конкретные вопросы когда столкнётесь с трудностями. Ибо с нуля постигать концепцию ООП — тот ещё гемор. |
|
|
WoWeb
|
Сообщение
#4
|
|
x64, Благодарю, буду грызть гранит науки)))
-------------------- |
|
|
KOLIAN |
16.10.2019, 19:10;
Ответить: KOLIAN
Сообщение
#5
|
|
Если книга, то PHP. Объекты, шаблоны и методики программирования (Мэт Зандстра)
Если видео, https://www.youtube.com/user/TheLukesky1/playlists Victor Zinchenko хорошо обьясняет все. -------------------- |
|
|
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; } } ?> -------------------- |
|
|
x64 |
16.10.2019, 23:14;
Ответить: x64
Сообщение
#7
|
|
function __construct() { $this->path = $_SERVER['DOCUMENT_ROOT'].'/cache/'; $this->cachFile = $this->path.md5($id).$this->ext; if(isset($_GET['cache'])) $this->nocache = true; } Что здесь есть $id? (: public $cacheTime; Объявлена, но не используется. |
|
|
WoWeb
|
Сообщение
#8
|
|
x64,
$cachTime - это время жизни кеша будет, там из базы будет доставать значение. $id - это id страницы для кеширования, использоваться будет так: $Cache->create($id); Сообщение отредактировал WoWeb - 17.10.2019, 9:59 -------------------- |
|
|
miketomlin |
17.10.2019, 18:44;
Ответить: miketomlin
Сообщение
#9
|
|
WoWeb, не понимаю, в чем проблема с подбором инфы по ООП. Оно сейчас везде, почти. Вот по процедурке действительно не хватает материалов с описанием «техник программирования».
Помимо пространства имен, о чем уже было сказано, можно отметить основные фишки ООП, в частности инкапсуляцию данных между разными функциями-методами одного объекта (на процедурке в пыхе, насколько знаю, такое можно сделать только внутри одной ф-ции, а для нескольких нужно либо использовать специальные/общие сеттеры/геттеры, либо сами эти ф-ции «инкапсулировать» в одну). Вообще считается, что ООП более удобно при коллективных разработках, коих подавляющее большинство, т.к. позволяет структурировать код средствами самого языка. Естественно, это не избавляет автоматом от б/г/кодинга. Да, много серьезных программеров относится к ООП весьма скептически, что не мешает им юзать его по полной. Да, и не забивай совсем на глоб. область видимости/использование обычных «хелперов», иначе рискуешь присоединиться к огромной толпе товарищей, страдающих «ООП головного мозга». -------------------- |
|
|
Gerga |
19.10.2019, 14:01;
Ответить: Gerga
Сообщение
#10
|
|
Буду благодарен за ссылки где можно почитать/посмотреть примеры кода с пояснениями Книга "Объектно-ориентированное мышление" от Мэтт Вайсфельд. Сообщение отредактировал Gerga - 19.10.2019, 14:02 |
|
|
|
Похожие темы
Тема | Ответов | Автор | Просмотров | Последний ответ | |
---|---|---|---|---|---|
Большие ставки для кликов в Я.Директ. Как удешевить? | 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 |
Текстовая версия | Сейчас: 29.3.2024, 11:34 |