Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Объектная модель


Автор: arial 14.4.2003, 13:47
Хотел бы задать такой вопрос:
В чем смысл объектной модели, какие преимущества она дает и как ее использовать?
Хотелось бы получить подробный ответ, сдобренный примерами. cool.gif

Автор: Mark.dll 14.4.2003, 15:59
На biggrin.gif
http://www.ddj.com/documents/s=3817/nam1012432272/index.html

Автор: Mark.dll 14.4.2003, 16:01
One of the main advantages of OOP is that it enables programmers to build customized data modules, each having specific attributes and functionality. In OOP lingo, this customized data module is known as a class.

Автор: arial 14.4.2003, 16:38
А по русски?

Автор: acp 14.4.2003, 18:12
А по русски это звучит так "Если у тебя небольшой проект и ты хочешь проблем на свою голову и большого геморроя, то используй ООП". smile.gif

PS: ООП не для маленьких проектов...

Автор: arial 14.4.2003, 18:54
Имеется в виду ссылка по русски.

Автор: Mark.dll 14.4.2003, 20:48
Цитата(arial @ 14.4.2003, 16:38)
А по русски?

Не искал на русском. К тому же, английский ты обязан знать biggrin.gif ,как любой кодер с головой на плечах.

Автор: Foxx 15.4.2003, 05:23
Цитата
К тому же, английский ты обязан знать  ,как любой кодер с головой на плечах.

это понятно... но что делать если приходилось изучать другой язык ? быстро ведь не переучишься.... sad.gif вот поэтому и ищещь где по мягче... то есть по русскиsmile.gif (самому пришлось изучать немецкий)

Автор: Devorior 15.4.2003, 08:15
в PHP объектную модель надо делать если это действительно необходимо, я например делаю только класс по работе с MySQL.

Автор: IZ@TOP 15.4.2003, 09:20
Цитата
(самому пришлось изучать немецкий)
Угу ... мне тоже ... правда я его так и не доучил ... хотя сам я немец ...
Цитата
в PHP объектную модель надо делать если это действительно необходимо, я например делаю только класс по работе с MySQL.

А я вооще все что можно на классах строю ...


Цитата
Хотел бы задать такой вопрос:
В чем смысл объектной модели, какие преимущества она дает и как ее использовать?
Хотелось бы получить подробный ответ, сдобренный примерами. 


Вообще сам по себе класс (это чтоб не кто не путался), это не обьект, а лишь его чертеж, а сам обьект представляет из себя экземпляр класса - со своими методами и свойствами (ну я и загнул ...)
Короче вот некоторый код, который я надеюсь тебе станет понятным
Код


Создаем класс, хотяб записи в файл ...

class save_file {

        var $file_path; // полный путь и имя файла в который будет производится запись
        var $data;

        function save($p) {
                 
                 if(!file_exists($this->file_path)) {
                          echo "ERROR: Нет такого файла !";
                 } else {
                          $fop = @fopen($this->file_path,$p) or die ("ERROR:Немогу открыть файл");
                          @fputs($fop,$this->data) or die ("ERROR: Немогу произвести запись в файл");
                          @fclose($fop);
                 }
        }
}

// Вот мы и создали свой класс
// Далее создаем на его основе экземпляр обьекта

// ---------------------------------------------------------------------

$sf = new save_file;
// оператор new говорит что создается новый экземпляр обьекта класса sava_file
$sf->fule_path = "txt/myfile.txt";
// присваиваем значение внутриклассовой переменной file_path (тобиш свойсто обьекта ... вроде так)
$sf->data = "энто типа то че в файл запишется";

$sf->save("a+");
// ну тут я надеюсь все понятно (а это вроде его методом называется если не ошибаюсь ...

// end


Если че не понятно ...

Автор: Foxx 15.4.2003, 11:33
понятно smile.gif лучше чем в книгах... особенно комментарии smile.gif

ОффТоп: не можешь так же обьяснить сессии ? а то уже как минимум 10 раз прочел, а так и не могу понять sad.gif жалательно с примером smile.gif

Автор: IZ@TOP 15.4.2003, 11:58
Цитата
понятно  лучше чем в книгах... особенно комментарии

Спасиб Огромное rolleyes.gif
Я и сам очень долго вникал в это все, тока пока с наследованием не разобрался ... да может это и не нужно ...
я мог бы и лучше написать еслиб не работа, времени не хватает ...

Попробую про сессии обьяснить если получится ... тока чуть попозже . sad.gif ..

Автор: Foxx 15.4.2003, 13:35
Цитата
Попробую про сессии обьяснить если получится ... тока чуть попозже

буду ждать smile.gif

Автор: IZ@TOP 15.4.2003, 16:31
Значит так:
Код

----------- index.php ------------

<?php

session_start(); // тута мы типа начинаем сессию, то есть если я не ошибаюсь - тебе присваивается идентификатор

echo "<a href=\"register.php\">Регистрация переменных ... </a>"; // ссылка на скрипт который будет регистрировать переменные (об этом далее)

?>
-----------------------------------------
------------ register.php ------------
<?php

if(isset($HTTP_POST_VARS['submit'] && $HTTP_POST_VARS['name'] && $HTTP_POST_VARS['password'])) {
     session_start(); // говорят что это надо в каждом файле писать в котором сессии используются ..
     session_register('name'); // самое главное - регистрация переменной, она запишется в сессию (сессии на сколько я знаю пишутся в файлы)
     session_register('password'); // ...
     echo "<a href="end_test.php">Посмотреть работает или нет ...</a>"; // ссылка на файл - в который не чего не передовалось get'om or post'om , но инфа которая была отправлена в этот сценарий и зарегестрирована, будет там отабражена
} else {
     ... тут форма выводится с полями для ввода пароля и имени
}

?>
-------------------------------
------- end_test.php -----
<?php

session_start();

echo "name:".$name."<br>";
echo "password:".$password;
// вроде так ...

?>



Короче говоря если че не заработает , илит еще вопросы появятся то лучше мне на мыло пиши ! (mailto:izatop@alien.pp.ru)

Автор: Foxx 15.4.2003, 16:35
спасибо smile.gif

Автор: IZ@TOP 15.4.2003, 16:49
Цитата
спасибо 

--------------------
Monster Programmer

Не за что ... монстр программирования wink.gif ...

Автор: Mark.dll 15.4.2003, 16:51
Ну и оффтопперы... smile.gif smile.gif smile.gif biggrin.gif biggrin.gif biggrin.gif

Автор: Foxx 15.4.2003, 16:53
ОффТоп......

Yunior PHP Programmer не нравилось, и это не нравиться confused.gif
Что же мне делать? smile.gif tounge.gif

Автор: Foxx 15.4.2003, 16:55
Цитата(Mark @ 15.4.2003, 11:51)
Ну и оффтопперы... smile.gif smile.gif smile.gif biggrin.gif biggrin.gif biggrin.gif

ну как те сказать я.... вообще то эту тему во флуде завел.... так что уж флудильщик smile.gif

Автор: arial 15.4.2003, 19:59
Iz@top, я не понимаю, почему нелзя просто применить функцию save(), т.е. в чем смысл самого использования ООС. Я не втыкаюсь.
Чтобы легче было понять, к чему я открыл эту тему, я напишу предысторию:
Я пишу сайт. Я там, типа, програмист - верстальщик - дизайнер. Моя задача - предоставить человеку, который администрирует этот сайт наиудобнейший контроль.
По логике вещей, к примеру, новости и гостевая книга это близнецы-братья (если для новостей сделать веб-интерфейс). И в новостях и в гостевухе добавляются новые сообщения (в новостях - новости за такое-то число, а в гостевухе мессаги), столько-то новостей/мессаг на каждую страницу, навигация между этими страницами и т.д.. Т.е., по логике вещей, можно создать некий класс, который в одном случае будет добавлять новость, а в другом сообщение.
Сейчас, т.к. я не понимаю ничего в ООС, я пытаюсь это осуществить, подставляя переменные в свои функции. Возможно я глубоко заблуждаюсь, не зря же ООС сейчас так востребована среди программистов.

Короче говоря я смысл ищу.

p.s.
Если вообще кто чё понял из того, что я написал.

Автор: IZ@TOP 16.4.2003, 10:35
Цитата
p.s.
Если вообще кто чё понял из того, что я написал

Понять то понял ... попробую объяснить зачем это все нужно:
Вот допустим говоришь что у тебя новости и гостевуха почти одно и тоже, то тут можно создать некий класс описывающий некие функции которые обрабатывают запросы из сценариев гостевой и новостей –
Определим функцию load_db() которая посредством определенных внутриклассовых переменных $dbDir и $dbName (все переменные определенные внутри класса вызываются в функции посредством стрелочной конкантенации : $this->dbDir = “db/”;, $this->dbName = “data.db”; …), определяет путь к файлу в котором хранится информация – будь то новости или гостевая. С помощью этой функции (код писать не буду, ты сам его наверное уже написал), из файла загружается массив данных (можно так же определить переменную $dbType, которая будет определять какая информация хранится в файле(можно так же сделать независимый сценарий который будет получать не тип а разделитель … ну и тд, я думаю понятно – если $this->exp = “|”; то значит файл будет разобран (допустим с помощью explode()), с разделителем ‘|’ – и создан массив … там ты сам определишь как он будет образовываться.
Потом можно определить еще пару внутриклассовых функций, которым ты будешь передавать через $this->db_array (который был заранее определен внутри класса), то есть внутриклассовые переменные могут передаваться в функцию, получать там значение, и передаваться в другие функции – допустим для форматированного вывода значения ну и т.д. … hmmm.gif

Код

// А теперь посмотрим как все это выглядит вызванное из сценария ...
// создаем обьект на основе созданного класса
$obj = new classname; // тут вписываешь имя класса за место класснаме
$obj->dbDir = "db/";
$obj->dbName = "guest.db";
$obj->load_db(); // загружаем массив
$obj->print_messages(); // допустим что у тя этот метод объекта печатает сообщения из гостевой
// соответственно в функцию print_messages() ты должен передать массив $db_array (через $this … если честно то я уже забыл как это называется – но это что то вроде this в javeScript …


Что дает обьектно ориентированный подход - независимость, на надо думать что там и как , главное что работает ! И самое главное что это все намного ускоряет обработку .... однако тут тож с умом надо к делу подходить
baaa.gif cool.gif biggrin.gif !

Автор: arial 16.4.2003, 22:23
Вроде смысл понял, написал класс, позволяющий делать постраничный вывод информации из файла. Действительно ООП удобно.
Всем спасибо.
Отдельное спасибо Iz@topу wink.gif

Автор: IZ@TOP 17.4.2003, 08:20
Цитата
Вроде смысл понял, написал класс, позволяющий делать постраничный вывод информации из файла. Действительно ООП удобно.
Всем спасибо.
Отдельное спасибо Iz@topу 

Молодец ! Если будут еще вопросы - ты знаешь где меня найти !

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)