Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

просветите про классы

396
01 ноября 2010 года
SibBear
223 / / 27.07.2006
есть массив
 
Код:
$lang_list[0] = Array(
              "name" => "russian",
              "filename" => "russian.php"
              );


а есть класс
 
Код:
class Language
       {
         var $name;
         var $filename;
       }
$lang_list[0] = new Language;
$lang_list[0] -> $name="russian";
$lang_list[0] -> $filename = "russian.php";


это реальная выдержка из двух разных примеров. по сути одно и тоже...

Обясните мне, в чем принципиальная разница? класс или массив? удобство, скорость, что?
244
01 ноября 2010 года
UAS
2.0K / / 19.07.2006
Ну почитайте на вики в общем про основные понятия классов.
В конкретном примере лучше массив, т.к. меньше памяти и больше производительности.

Опять же - все зависит от ситуации. Где-то лучше массив, где-то лучше класс. Чтобы "просветить", то задайте более детализированную задачу, т.к. по данному условию очевиднее использовать массивы. А для какой-то задачи удобнее классы. Более подробно распишите, на чем задумались.
396
01 ноября 2010 года
SibBear
223 / / 27.07.2006
все над теми же модулями :)

сейчас у меня масссив
 
Код:
$modules["some module"] = Array(
               "name"=>
               "menu_parent"=>
               "lang_file" =>
               "main_template" =>
               "admin_template" =>
               ...
             );

во многих проектах вижу классы, возник вопрос, что лучше. Лично мне удобнее массив, но это пока субъективное мнение обусловленное незнанием...
244
01 ноября 2010 года
UAS
2.0K / / 19.07.2006
Он лучше лишь потому, что другого не исопльзовали. Классы полезны тем, что с помощью него "можно все разложить по полочкам". Например, мне намного удобнее для хранения списка (информации) о модулях хранить в синглтоне:
Код:
class ModulesList {
    protected $_instance = null;
    protected $_modules_info = array();

    protected function __construct() {
        // здесь происходит анализ всех модулей и сбор информации
        // занесение её в modules_info
    }

    public function getInfo($module_id) {
        if( !isset($this->_module_info[$module_id]) ) return false; // или Exception
        return $this->_module_info[$module_id];
    }
}


Теперь я не могу волноваться, что какой-то модуль вдруг забудет указать "menu_parent" или "admin_template". Все действия вынесены в одно место и обрабатываются в одном месте. В том же конструкторе можно реализовать проверку модулей на корректность, соответствие интерфейсам и т.д.
В случае с простыми массивами возможность контроля и целостности данных минимальна, объем кода для проверки в каждом участке использования - максимально. Прийдется каждй раз делать проверки на корректность данных, с классами же проверка будет только в одном месте, не разброшена по коду.

Ну это простые мои примеры по преимуществам такого подхода. Тем более синглтон можно подключить через include один раз в главном коде, далее он будет доступен везде и виден везде. Да и документировать так данные легче, чем при использовании global.
396
01 ноября 2010 года
SibBear
223 / / 27.07.2006
Благодарю! Очень доходчево, пойду копать!
15
02 ноября 2010 года
shaelf
2.7K / / 04.05.2005
2UAS Не упоминай синглтон в суе :)) Он для многих потихоньку перекачёвывает а антипаттерны )
244
02 ноября 2010 года
UAS
2.0K / / 19.07.2006
Суе? о_О Антипаттерн? о_О
Я кажется отстал от жизни)) Что такое первое и почему второе?)
396
02 ноября 2010 года
SibBear
223 / / 27.07.2006
да, знания С++ мне бы щас пригодились...
244
02 ноября 2010 года
UAS
2.0K / / 19.07.2006
Зачем?) Чтобы понять ООП?)
Я в свое время пересел когда-то на Яву (Java, а не ява-скрипт) на пару месяцев - ООП познал хорошо и набрался много опыта, чего и вам советую.

В принципе, и C# так же весь ООП, но больше в своей жизни я работал с явой, потому говорю относительно её.
274
03 ноября 2010 года
Lone Wolf
1.3K / / 26.11.2006
да простят меня наСИльники, но ИМХО, С++ и ООП понятия немного не совместимые...
Я вот тоже, принципы ООП изучил, толькол благодаря Java
285
03 ноября 2010 года
Romik
479 / / 24.11.2002
Считаю пример в третьем посте замечательной иллюстрацией к разрешению вопроса когда что юзать. Потребность в классах возникает когда над набором данных требуются специальные действия, которые в общем случае присущи только этим данным. Приведённый массив можно легко заменить классом, но это окажется бесполезной и даже вредной затеей, если не класс не будет предлагать собственные востребованные методы.
15
03 ноября 2010 года
shaelf
2.7K / / 04.05.2005
Цитата: UAS
Суе? о_О Антипаттерн? о_О
Я кажется отстал от жизни)) Что такое первое и почему второе?)



Всуе (http://ru.wiktionary.org/wiki/всуе)
Антипаттерн (http://ru.wikipedia.org/wiki/Антипаттерн)

Цитата: Romik
Считаю пример в третьем посте замечательной иллюстрацией к разрешению вопроса когда что юзать. Потребность в классах возникает когда над набором данных требуются специальные действия, которые в общем случае присущи только этим данным. Приведённый массив можно легко заменить классом, но это окажется бесполезной и даже вредной затеей, если не класс не будет предлагать собственные востребованные методы.



Не совсем так. Класс это в первое очередь структура с своим типом.

PS Могу посоветовать прочитать про маркерные интерфейсы (может зря и ты знаешь что это такое).

396
06 ноября 2010 года
SibBear
223 / / 27.07.2006
Я сейчас попробую наглядно описать, что я делаю
было
 
Код:
if ($_POST['save'])
{ куча кода по сохранению данных }

сделал
 
Код:
class NewClass
{
  $некоторые переменные
  function save($val)
    { таже куча кода по сохранению от $val }
}


теперь если мне нужно чтото изменить при сохранении я делаю
 
Код:
class ChengedNewClass extends NewClass
{
  function save($val, $newVal) {
         NewClass::save($val);
         дополнительные код по сохранению от $val, $newVal}
}


ж@па?
ну хотябы ход мыслей правильный?
274
06 ноября 2010 года
Lone Wolf
1.3K / / 26.11.2006
нет.. если переопределяешь функцию, то она должна иметь точно то кол-во параметров, что и родитель...

Обьясни детальнее что такое val и newval
396
06 ноября 2010 года
SibBear
223 / / 27.07.2006
хе, а мне как раз надо, чтобы был набор параметров дополнительный у функции. $val образно - набор параметров изначальный, $newval - параметры, которые я хочу использовать дополнительно при изменении (дополнении) функции.
244
06 ноября 2010 года
UAS
2.0K / / 19.07.2006
Ну дык сделайте отдельный метод наподобие Add (смысл думаю понятен). А уж после Add идет save данных.
Или я чего-то опять не понял
396
06 ноября 2010 года
SibBear
223 / / 27.07.2006
В index.php есть функция save($val), ее мы не видим, не знаем (ну как бы не знаем, естесно знаем мы как она работает, что делает и т.п.), но затея "незадеть сам index.php", как в нем идет

 
Код:
function save() {...}

if (...) { save(); }

так и идет. Но!

 
Код:
function save() {...}

Вот тут есть какой то код, который в другом файле, и поэтому с ним мы можем делать все что угодно, но он должен сделать какоето чудо, что save() ниже станет немного другой.

if (...) { save(); }


вот. И всеравно я не понимаю, почему набор параметров в функции нельзя менять при переопределении. если я при переопределении напишу
 
Код:
function save($val, $newVal=1) {}


то при вызове save($val); она ругаться будет чтоли?
396
06 ноября 2010 года
SibBear
223 / / 27.07.2006
Цитата: UAS
Ну дык сделайте отдельный метод наподобие Add (смысл думаю понятен). А уж после Add идет save данных.
Или я чего-то опять не понял



это как то как? не понимаю :(

 
Код:
class ChengedNewClass extends NewClass
{
  function add($newVal) {}

  function save($val) {
         NewClass::save($val);
         $this->add();}
}
244
06 ноября 2010 года
UAS
2.0K / / 19.07.2006
Я просто не понимаю, что делает Save и что должно происходить при добавлении второго параметра к функции. Вы задаете фактически проблему, но саму её не описываете. А глядя на код я вообще так и не могу понять, зачем класс, для чего класс, что и как обрабатывает методы класса.
Пока что я не вижу, что должно преобразиться при вводе второго параметра, т.е. он влияет как-то на первый параметр или вообще че надо.
396
06 ноября 2010 года
SibBear
223 / / 27.07.2006
Все, я сам на свой вопрос и ответил
если я не могу в index.php залезть и изменить вызов save(), то на кой ляд мне второй набор параметров...

ну покрайней мере разобрался с переопределением. Могу изменить save() перед ее вызовом, это самое главное...
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог