Те, кто не чуят разницу, при этом ещё и упёрлись рогами - встретимся через годик, за который я надеюсь вы поднатаскаетесь в ООП - тогда и поговорим о принципиальной разнице между этими двумя вариантами.
Psih Специально для тех, кто топики не читает, а просматривает - http://php.ru/forum/viewtopic.php?p=57911#57911 И к твоему сведению, в ООП я разбираюсь не хуже тебя. Просто надо немного думать, где ООП имеет смысл применять, а где нет, и не пихать его куда попало. Еще раз, для тех умников, которые прибегают в тему с выпученными глазами и начинают орать, мол, ООП это будущее, а вы тут тормозите научно-технический прогресс - ПХП не Ява! Даже в Яве перед написанием слова "class" нужно немного думать головой. А в ПХП и подавно. Я не знаю, что еще можно к этому добавить. Если опять напишут "но ведь классы это круто!" и в десятый начнется сказка про белого бычка, я наверное свалю отсюда. Достало.
не, ооп лучше изучать на базе яваскрипта, иначе будешь мыслить штампами типа "объект - это экземпляр некоего класса", "чтобы добавить метод нужно создать класс-наследник" и прочими
Читал я, читал. Вы мыслите функциями а не объектом в целом. Придераетесь к кол-ву методов, тому, что объект нужно инициализировать и.т.д. Я даже не хочу начинать спорить, потому что в итоге всё выльеться в то, что при объектном подходе получиться больше кода. Вы не думаете о том, что мест применения может быть 10, 20, даже больше. И что будет если писать в каждом из этих мест если всё делать функциями, и что будет если писать это с помощью объекта типа Date.
На солнце пятна каким-то особым узором выстроились? Здесь бойня жесткая идет - http://forum.vingrad.ru/index.php?showtopic=131045 Теперь тут
Интересно, среди тех кто оставил более 1-го или 2-х сообщений в этом топике (т.е фанаты холиварщики) прочитали хоть раз в жизни http://phpclub.ru/detail/article/oop-vs-proc ?
По поводу Код (Text): $b= new Date (); //vs. $b=time(); В чём разница между процедурами и ООП подходом? 1). В случае процедуры вам нужно применять разные функции для получения даты в зависимости от того, нужно ли вам текущее время или какая-то определённая дата. Объект может по умолчанию инициализироваться с текущим временем, но если ему передана дата/timestamp - он инициализируеться с указанной датой. В итоге у нас везде идёт одинаково: $b = new Date(); с единственной разницой что у него может быть параметр а может не быть. 2). Объект в себе может хранить дату в каком-то конкретном формате вне зависимости от того, какой формат вы ему передали и какой вам нужен от него - он сам приобразует в указанный вами формат при выводе, который можно указать в конструкрое вторым параметром к примеру или методе получения даты. Вам не нужно помнить что у вас одна дата таймстамп а другая строка к примеру и перед вычислениями вам нужно преобразовать их к одному формату и в зависимости от формата ещё и применить одну или другую функцию. 3). Найти потом в коде все места где есть объект проще чем набор функций (функций много, а у объекта название всегда одно). 4). Калькуляции можно выполнять в пределах объекта а не отдельными функциями. Вообщем объект сам с собой может делать ВСЁ что ему надо. Вобщем-то те, кто скажут, что в данном случае не такая уж и большая разниа будут правы. Слишком мелка задача для целого класса, что бы бло разумно его создавать. Редко кому требуеться делать много вычислений и манипуляций с датами на PHP. Лично я с датами почти всегда работаю на уровне базы данных в SQL - там проще. А люди, работающие с всякими финансовыми штуками врядли делают это на PHP Вообщем пример на самом деле неудачен, хотя частично и тут ООП может себя проявить, но всё-же для большинства мои доводы будут в пустую. Я вижу нишу ООП в PHP - это CMS, CMF и всякие большгие вещи, где всего много и что-бы там не запутаться нужно исползовать ООП, что бы не погрязнуть в хаосе функций.
Psih, пример и правда никакой . Да и вопрос ведь не о том, в чём разница, а зачем вообще ООП нужен . Ща я попробую. host, пример приведённый тобой в первом посте очень плохой. Для такого класс действительно не нужен, даже отдельная функция и то перебор. Выкини этот учебник . ООП нужен тогда, когда необходимо объеденить несколько функций. Я покажу, как мне думается, внятный пример, когда использовать функции это тупо и вообще бяка, а ООП самое оно. Читаем файл в php PHP: $fp = fopen('filename.txt', 'r'); echo fread($fp, filesize('filename.txt')); // fread() тоже имеет алиасы, и это самое страшное в php - алиасы // или так readfile('filename.txt'); // или так echo file_get_contents('filename.txt'); // даже так fpassthru('filename.txt'); // ты не поверишь, но и так echo join('', 'filename.txt')); // этот пример приводят на сайте php.net, как адекватный, так что в кучку Читаем файл в python`е Код (Text): print open('filename.txt').read() Как было бы хорошо с ООП в php PHP: $open = new open('filename.txt'); echo $open->read(); Всё очень просто и внятно. Теперь, почему (точнее, "когда") ООП бяка, а функции хорошо. PHP: function hey($arg = 41){ // простые операции return $arg } echo (string)hey(); // переводим число в строку PHP: class Hey { function hey($arg = 41){ // простые операции $this->arg = $arg; return $arg; } function __toString(){ // переводим число в строку return $this->arg; } } $hey = new Hey; echo $hey->arg; Во втором примере я пропустил все нудности. Как видишь, тут для простой задачи учудили целую катавасию с классом. P.S. И не слушай любителей Java, они вообще для всего классы городят, потому что банально иначе не умеют.
Люди, можете поздравить, теперь понятно зачем ООП дано. На практике применил, удобно, и самое главное можно добавлять всякое причем все будет работать по описанному принципу.
Здравствуйте, наткнулся в учебнике, но по-моему здесь что-то не то. Вот код: PHP: <?php Class Integer { private $number; public function GetInt() { return (int)$this->number; } } Class Float { private $number; public function GetFloat() { return (float)$this->number; } } Class Math { public function add ($a1, $a2) { return $a1->GetFloat() + $a2->GetFloat(); } } ?> Мне кажется, что в этой строчке что-то не то: Код (Text): return $a1->GetFloat() + $a2->GetFloat(); Скажите верна ли эта строка?
Верна. Но в Math::add можно передать только объекты Float. ps это целый пример или там ещё что-то есть?
Sergey89 Это целый пример. Код (Text): return $a1->GetFloat() + $a2->GetFloat(); Да, но в классе Math нет метода GetFloat, он же в другом классе, причем возвращает $this->number + Какая связь между $a1 и $this->number ?
host подразумевается, что ты будешь передавать в add объекты. $a1 - экземпляр класса Float. Что за учебник?
Sergey89 Но в методе add должны быть также и переданны числа ($a1, $a2), иначе нет смысла такое вытворять.
добавь конструктор PHP: Class Float { private $number; public function __construct($num) { $this->number = $num; } public function GetFloat() { return (float)$this->number; } } PHP: print $math->add(new Float(12.7), new Float(46.3));