Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Необходим ли ООП в php? 
:(
    Опции темы
NLspieler
Дата 2.8.2009, 12:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 619
Регистрация: 13.10.2008
Где: Берлин

Репутация: 16
Всего: 19



Сколько не бился, так и не смог понять, зачем в php нужен ООП.
Ведь любые задачи можно выполнить без его использования.

Чем объект лучше ассоциативного массива?
Чем метод лучше обычной пользовательской функции?

Слышал такой довод, что так якобы удобнее. 
Чем удобнее, если нужно писать несколько строк лишнего кода, который впринципе ничего не делает?

Для примера приведу реализацию "объекта и метода" без использования классов:
Код


<?

$auto['marka'] = 'Запорожец 2110'; // Марка
$auto['color'] = 'Лунная ночь';    // Цвет
$auto['inhaber'] = 'Вася Пупкин';  // Владелец

function new_inhaber ($auto , $new_inhaber)
{
    $auto['inhaber'] = $new_inhaber ;
    return $auto ;
}

//Пример использования
$auto = new_inhaber ($auto , 'Маша Машкова') ;

//Или можно написать такой метод

function new_color ($objekt , $new_color)
{
    global $$objekt ;
    $$objekt['color'] = $new_color ;
}

//Пример использования
new_color ('auto' , 'Черный') ;

?>


PM MAIL   Вверх
Ипатьев
Дата 2.8.2009, 12:44 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2232
Регистрация: 5.7.2009

Репутация: 28
Всего: 37



Я думаю, правильнее было бы ставить вопрос так: "Необходимо ли ООП программисту?"
PM MAIL   Вверх
NLspieler
Дата 2.8.2009, 13:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 619
Регистрация: 13.10.2008
Где: Берлин

Репутация: 16
Всего: 19



Цитата(Ипатьев @  2.8.2009,  12:44 Найти цитируемый пост)
Я думаю, правильнее было бы ставить вопрос так: "Необходимо ли ООП программисту?"

Согласен, но так как других языков я не знаю, то 
поставил вопрос конкретно о php
PM MAIL   Вверх
Sentox
Дата 2.8.2009, 13:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


как то так
**


Профиль
Группа: Участник
Сообщений: 392
Регистрация: 27.1.2009
Где: Зимбабве

Репутация: 7
Всего: 7



Во первых: как мне защитить допустим Машку Машкову от junior programmer и дать открытые функции для управления обьектом и его свойствами?

Во вторых: если есть Запорожцев штук 100 марок к примеру каждому Запорожцу писать свойства и функции работы с этими обьектами 100 раз!Если Вы рефакторили какую то функцию , которая влияет на свойства всех Запорожцев, это надо исправлять во всех 100! марках Запорожцев!

А если Запорожец динамически изменяется и от этого изменяются все Запорожцы ...

Можно много ещё найти плюсов к ООП.

PM MAIL   Вверх
nerezus
Дата 2.8.2009, 13:17 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вселенский отказник
****


Профиль
Группа: Участник
Сообщений: 3330
Регистрация: 15.6.2005

Репутация: 12
Всего: 43



Цитата

Необходим ли ООП в php?
 Совсем нет, для домашней странички можно и без него обойтись. А можно и без PHP даже.


--------------------
Сообщество художников Artsociety.ru
PM MAIL WWW   Вверх
youri
Дата 2.8.2009, 13:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 17.4.2004

Репутация: 6
Всего: 16



ООП можно использовать в языках, где классы и/или объекты отсутствуют. Но зачем их эмулировать в языке, в котором они присутствуют?

Во втором варианте ты засоряешь глобальную область видимости (можешь случайно создать два объекта с одним и тем же именем)
PM   Вверх
NLspieler
Дата 2.8.2009, 14:02 (ссылка)    | (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 619
Регистрация: 13.10.2008
Где: Берлин

Репутация: 16
Всего: 19



Цитата

Во первых: как мне защитить допустим Машку Машкову от junior programmer и дать открытые функции для управления обьектом и его свойствами?


Код

<?

$mashka['name'] = 'Машка Машкова' ;
$mashka['zelka'] = TRUE ;

function sex ($objekt)
{
    $objekt['zelka'] = FALSE ;
    return $objekt ;
}

//Как можно при помощи ООП защитить Машку? от "метода":
$mashka = sex ($mashka) ;

?>



Цитата(youri @  2.8.2009,  13:31 Найти цитируемый пост)
Во втором варианте ты засоряешь глобальную область видимости (можешь случайно создать два объекта с одним и тем же именем)

Согласен, ошибся. Такой пример вообще не работает.

PM MAIL   Вверх
Ипатьев
Дата 2.8.2009, 14:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2232
Регистрация: 5.7.2009

Репутация: 28
Всего: 37



Цитата(Sentox @  2.8.2009,  13:14 Найти цитируемый пост)
Во вторых: если есть Запорожцев штук 100 марок

Мне думается, автор имел ввиду, нсколько часто встречаются в типичных для РНР задачах сто марок запорожцев.
PM MAIL   Вверх
Sentox
Дата 2.8.2009, 14:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


как то так
**


Профиль
Группа: Участник
Сообщений: 392
Регистрация: 27.1.2009
Где: Зимбабве

Репутация: 7
Всего: 7



Цитата(NLspieler @ 2.8.2009,  14:02)
Цитата


Код

<?

$mashka['name'] = 'Машка Машкова' ;
$mashka['zelka'] = TRUE ;

function sex ($objekt)
{
    $objekt['zelka'] = FALSE ;
    return $objekt ;
}

//Как можно при помощи ООП защитить Машку? от "метода":
$mashka = sex ($mashka) ;

?>




Нет как защитить именно эти свойства 

Код

$mashka['name'] = 'Машка Машкова' ;
$mashka['zelka'] = TRUE ;


Они доступны для любого программиста.
Если закрыть их функцией то они же становятся доступными только в области видимости данной функции.
Это сильно ограничивает использование такого метода организации особенно при рефакторинге.

PS: В приведённом примере Вы не защитили свойства обьекта от бесконтрольных изменений. 

Это сообщение отредактировал(а) Sentox - 2.8.2009, 14:22
PM MAIL   Вверх
NLspieler
Дата 2.8.2009, 14:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 619
Регистрация: 13.10.2008
Где: Берлин

Репутация: 16
Всего: 19



Цитата(Sentox @  2.8.2009,  14:20 Найти цитируемый пост)
Они доступны для любого программиста.Если закрыть их функцией то они же становятся доступными только в области видимости данной функции.Это сильно ограничивает использование такого метода организации особенно при рефакторинге.PS: В приведённом примере Вы не защитили свойства обьекта от бесконтрольных изменений. 


Кажется я начинаю понимать всю силу и важность ООП.

ООП позволяет защититься от следующих недопустимых в реальном мире операций,
тем самым улчушая процесс моделирования.
Код

<?

$mashka['name'] = 'Машка Машкова' ;
$mashka['zelka'] = TRUE ;

function sex ($objekt)
{
    $objekt['zelka'] = FALSE ;
    return $objekt ;
}

$mashka = sex ($mashka) ;

$mashka['zelka'] = TRUE ; //Машка стала опять целкой, что в реальном мире не возможно

?>


PM MAIL   Вверх
gcc
Дата 2.8.2009, 14:45 (ссылка)    | (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: -1
Всего: 17



если я не ошибаюсь, то доспут к методу (класса) в пхп через сишный указатель (тоже самое и у Java)

вот такой код будет быстрее
Код

class c {
        public $n;
        function hw() {
                $this->n++;
        }
        function do_it() {
                $i = 0; $this->n = 0;
                while ($i < 1000000) { $i++; $this->hw(); }
        }
}
$inst = new c();
$inst->do_it();  


чем функциональный на пхп (так как в пхп указателей нету, например: в perl есть (копировать можно))

Это сообщение отредактировал(а) gcc - 2.8.2009, 15:24
PM WWW ICQ Skype GTalk Jabber   Вверх
NLspieler
Дата 2.8.2009, 15:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 619
Регистрация: 13.10.2008
Где: Берлин

Репутация: 16
Всего: 19



Давайте вернемся к нашей Машке.
Ради такого случая, решил прочитать и понять, как создаются классы и методы.

Написал класс. 

Код

<?php

class girl 
{
    var $name ;
    var $zelka ;

    function girl($name , $zelka) 
    {
        $this->name = $name;
        $this->zelka = $zelka;
    }
    
    function sex ()
    {
        $this->zelka = FALSE ;
    }
}


$mashka = new girl('Маша Машкова' , TRUE);
$mashka->sex ();

$mashka->zelka = TRUE ; //Следовательно цель не достигнута!

?>

Как защитить свойства Машки от несанкционированного доступа, что бы изменять их можно было только через методы класса?

Это сообщение отредактировал(а) NLspieler - 2.8.2009, 15:01
PM MAIL   Вверх
Sentox
Дата 2.8.2009, 15:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


как то так
**


Профиль
Группа: Участник
Сообщений: 392
Регистрация: 27.1.2009
Где: Зимбабве

Репутация: 7
Всего: 7



Добавлено @ 15:05
Цитата(NLspieler @ 2.8.2009,  15:01)
Давайте вернемся к нашей Машке.
Ради такого случая, решил прочитать и понять, как создаются классы и методы.

Написал класс. 

Код

<?php

class girl 
{
    var $name ;
    var $zelka ;

    function girl($name , $zelka) 
    {
        $this->name = $name;
        $this->zelka = $zelka;
    }
    
    function sex ()
    {
        $this->zelka = FALSE ;
    }
}


$mashka = new girl('Маша Машкова' , TRUE);
$mashka->sex ();

$mashka->zelka = TRUE ; //Следовательно цель не достигнута!

?>

Как защитить свойства Машки от несанкционированного доступа, что бы изменять их можно было только через методы класса?

Прочитать про PHP5 и кодить в нём.
Существуют области видимости свойств public, protected и private.
В нашем случае private и protected не дадут это сделать.

PS: Вы используете PHP4

Добавлено @ 15:10
Код

<?php
class girl 
{
    private $name ;
    private $zelka ;

    public function __construct($name , $zelka) 
    {
        $this->name = $name;
        $this->zelka = $zelka;
    }
    
    public function sex ()
    {
        $this->zelka = FALSE ;
    }

    public function getName()
    {
         return $this->name;
    }
}

$mashka = new girl('Маша Машкова' , TRUE);
$mashka->sex ();
$mashka->zelka = TRUE ; //Warning!!!! Интерпретатор выведет ошибку 
$mmm = $mashka->getName(); // Но для этого есть сеттеры и геттеры
echo $mmm; // Выведит 'Маша Машкова' 
?>


Это сообщение отредактировал(а) Sentox - 2.8.2009, 15:13
PM MAIL   Вверх
gcc
Дата 2.8.2009, 17:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: -1
Всего: 17



вот тут вот кропаль есть, я там спрашивал
PM WWW ICQ Skype GTalk Jabber   Вверх
Kallisto
Дата 2.8.2009, 19:20 (ссылка) |  (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 163
Регистрация: 20.4.2007

Репутация: -3
Всего: -1



Глупая постановка вопроса.

Автор спрашивает зачем нужно в РНР если можно обойтись ас. массивами. Но при этом забывает, что в с++ тоже можно сделать ас.массив.

ТС почитай что такое ООП, зачем оно, где его надо применять, а где нет, возможно вопросы отпадут, потому что есть разные ситуации - разные решения.

PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1792 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.