$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";
{
var $name;
var $filename;
}
$lang_list[0] = new Language;
$lang_list[0] -> $name="russian";
$lang_list[0] -> $filename = "russian.php";
это реальная выдержка из двух разных примеров. по сути одно и тоже...
Обясните мне, в чем принципиальная разница? класс или массив? удобство, скорость, что?
В конкретном примере лучше массив, т.к. меньше памяти и больше производительности.
Опять же - все зависит от ситуации. Где-то лучше массив, где-то лучше класс. Чтобы "просветить", то задайте более детализированную задачу, т.к. по данному условию очевиднее использовать массивы. А для какой-то задачи удобнее классы. Более подробно распишите, на чем задумались.
сейчас у меня масссив
Код:
$modules["some module"] = Array(
"name"=>
"menu_parent"=>
"lang_file" =>
"main_template" =>
"admin_template" =>
...
);
"name"=>
"menu_parent"=>
"lang_file" =>
"main_template" =>
"admin_template" =>
...
);
во многих проектах вижу классы, возник вопрос, что лучше. Лично мне удобнее массив, но это пока субъективное мнение обусловленное незнанием...
Код:
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];
}
}
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.
Благодарю! Очень доходчево, пойду копать!
2UAS Не упоминай синглтон в суе :)) Он для многих потихоньку перекачёвывает а антипаттерны )
Я кажется отстал от жизни)) Что такое первое и почему второе?)
да, знания С++ мне бы щас пригодились...
Я в свое время пересел когда-то на Яву (Java, а не ява-скрипт) на пару месяцев - ООП познал хорошо и набрался много опыта, чего и вам советую.
В принципе, и C# так же весь ООП, но больше в своей жизни я работал с явой, потому говорю относительно её.
Я вот тоже, принципы ООП изучил, толькол благодаря Java
Считаю пример в третьем посте замечательной иллюстрацией к разрешению вопроса когда что юзать. Потребность в классах возникает когда над набором данных требуются специальные действия, которые в общем случае присущи только этим данным. Приведённый массив можно легко заменить классом, но это окажется бесполезной и даже вредной затеей, если не класс не будет предлагать собственные востребованные методы.
Цитата: UAS
Суе? о_О Антипаттерн? о_О
Я кажется отстал от жизни)) Что такое первое и почему второе?)
Я кажется отстал от жизни)) Что такое первое и почему второе?)
Всуе (http://ru.wiktionary.org/wiki/всуе)
Антипаттерн (http://ru.wikipedia.org/wiki/Антипаттерн)
Цитата: Romik
Считаю пример в третьем посте замечательной иллюстрацией к разрешению вопроса когда что юзать. Потребность в классах возникает когда над набором данных требуются специальные действия, которые в общем случае присущи только этим данным. Приведённый массив можно легко заменить классом, но это окажется бесполезной и даже вредной затеей, если не класс не будет предлагать собственные востребованные методы.
Не совсем так. Класс это в первое очередь структура с своим типом.
PS Могу посоветовать прочитать про маркерные интерфейсы (может зря и ты знаешь что это такое).
было
Код:
if ($_POST['save'])
{ куча кода по сохранению данных }
{ куча кода по сохранению данных }
сделал
Код:
class NewClass
{
$некоторые переменные
function save($val)
{ таже куча кода по сохранению от $val }
}
{
$некоторые переменные
function save($val)
{ таже куча кода по сохранению от $val }
}
теперь если мне нужно чтото изменить при сохранении я делаю
Код:
class ChengedNewClass extends NewClass
{
function save($val, $newVal) {
NewClass::save($val);
дополнительные код по сохранению от $val, $newVal}
}
{
function save($val, $newVal) {
NewClass::save($val);
дополнительные код по сохранению от $val, $newVal}
}
ж@па?
ну хотябы ход мыслей правильный?
Обьясни детальнее что такое val и newval
хе, а мне как раз надо, чтобы был набор параметров дополнительный у функции. $val образно - набор параметров изначальный, $newval - параметры, которые я хочу использовать дополнительно при изменении (дополнении) функции.
Или я чего-то опять не понял
Код:
function save() {...}
if (...) { save(); }
if (...) { save(); }
так и идет. Но!
Код:
function save() {...}
Вот тут есть какой то код, который в другом файле, и поэтому с ним мы можем делать все что угодно, но он должен сделать какоето чудо, что save() ниже станет немного другой.
if (...) { save(); }
Вот тут есть какой то код, который в другом файле, и поэтому с ним мы можем делать все что угодно, но он должен сделать какоето чудо, что save() ниже станет немного другой.
if (...) { save(); }
вот. И всеравно я не понимаю, почему набор параметров в функции нельзя менять при переопределении. если я при переопределении напишу
Код:
function save($val, $newVal=1) {}
то при вызове save($val); она ругаться будет чтоли?
Цитата: UAS
Ну дык сделайте отдельный метод наподобие Add (смысл думаю понятен). А уж после Add идет save данных.
Или я чего-то опять не понял
Или я чего-то опять не понял
это как то как? не понимаю :(
Код:
class ChengedNewClass extends NewClass
{
function add($newVal) {}
function save($val) {
NewClass::save($val);
$this->add();}
}
{
function add($newVal) {}
function save($val) {
NewClass::save($val);
$this->add();}
}
Пока что я не вижу, что должно преобразиться при вводе второго параметра, т.е. он влияет как-то на первый параметр или вообще че надо.
если я не могу в index.php залезть и изменить вызов save(), то на кой ляд мне второй набор параметров...
ну покрайней мере разобрался с переопределением. Могу изменить save() перед ее вызовом, это самое главное...