Форум → Программирование → PHP для идиотов → PHP и ООП → непонятки с ООП
непонятки с ООП
Страницы: ← Предыдущая страница • Следующая страница →
-
22 января 2010 г. 9:50, спустя 1 час 29 минут 1 секунду
Одного суицидника спасли….https://smappi.org/ - платформа по созданию API на все случаи жизни -
22 января 2010 г. 10:52, спустя 1 час 2 минуты 39 секунд
нео, на самом деле ложки не существует =)
Просто здесь другой прикол, каждый видит мир по своему, у кого-то страница - может все, а кто ее так не видит. Кто-то видит, что страница - это лишь страница, а кто-то говорит - она разбита на блоки, а кто-то добавит: "о у страницы есть заголовок". -
22 января 2010 г. 11:40, спустя 47 минут 52 секунды
хороший рассказ, мне понравилось.
…
mario, если бы я мог тебе дать совет, как человек опытный, я бы сказал, смотри на свою программу или приложение, как микроотображение объектов реального мира, это я считаю главным. Но опыта нет и я не хуя не понимаю еще, по этому могу ошибаться.Спустя 205 сек.нельзя удалять сообщения, так нечестно
Я и посмотрел на объект Page как на реальный объект этого мира… у меня это и вышло…
PS скоро в принципе скину полученный код… глянемс :) -
22 января 2010 г. 11:45, спустя 4 минуты 58 секунд
NRG, а для кого-то она существует, но мы то знаем, что ее нет, ну да ладно =) -
-
22 января 2010 г. 12:39, спустя 34 минуты 1 секунду
Одного суицидника спасли….
ололо
krasun, ложки точно нет
по поводуclass A{
private $id;
private $description;
public function setID ($id) {
$this->id = $id;
}
public function __call($name){ // name=getDescription
$var = strtolower(substr($name,0,2));
return this->{$var};
}
}
объясняю подробнее
class Page{
private $id;
private $page; // array
public function __construct($id){
$this->setId($id);
}
private load(){ // lazy load
if(!$this->id)
throw new PageExeprion();
// логика по извлечению страницы из бд или откуда то там
$this->page = Registry::get("DB")->fetch("SELECT * from pages WHERE id ={$id}")
}
public function __call($name, $arguments){
// тут $name это имя вызванного метода, $arguments аргументы
// унифицируем строку
$name = strtolower($name);
// смотрим что за метод сеттер или геттер
$setget = substr($name,0,3);
// получаем имя свойства
$prop = substr($name,3);
if ($setget = 'set') {
// если такое свойство есть в объекте сетим его прямо в объект
if(in_array($prop, get_object_vars($this)))
$this->{$prop} = $arguments[0];
// если нет то в страницу
else
$this->page[$name] = $arguments[0];
} else {
// если это геттер то отдаем то что просили, можно проверить может это свойство объекта но мне лень
if (!$this->page)
$this->load();
return this->page[$name];
}
}
}
// работает так
class Action{
…
public function doAction(){
$id = Get::from::url::id();
$page = new Page($id);
$this->tpl->assign("title",$page->getTitle())
}
} -
22 января 2010 г. 12:42, спустя 3 минуты 28 секунд
спасибо!
Одного суицидника спасли….
ололо
krasun, ложки точно нет
по поводуclass A{
private $id;
private $description;
public function setID ($id) {
$this->id = $id;
}
public function __call($name){ // name=getDescription
$var = strtolower(substr($name,0,2));
return this->{$var};
}
}
объясняю подробнее
class Page{
private $id;
private $page; // array
public function __construct($id){
$this->setId($id);
}
private load(){ // lazy load
if(!$this->id)
throw new PageExeprion();
// логика по извлечению страницы из бд или откуда то там
$this->page = Registry::get("DB")->fetch("SELECT * from pages WHERE id ={$id}")
}
public function __call($name, $arguments){
// тут $name это имя вызванного метода, $arguments аргументы
// унифицируем строку
$name = strtolower($name);
// смотрим что за метод сеттер или геттер
$setget = substr($name,0,3);
// получаем имя свойства
$prop = substr($name,3);
if ($setget = 'set') {
// если такое свойство есть в объекте сетим его прямо в объект
if(in_array($prop, get_object_vars($this)))
$this->{$prop} = $arguments[0];
// если нет то в страницу
else
$this->page[$name] = $arguments[0];
} else {
// если это геттер то отдаем то что просили, можно проверить может это свойство объекта но мне лень
if (!$this->page)
$this->load();
return this->page[$name];
}
}
}
// работает так
class Action{
…
public function doAction(){
$id = Get::from::url::id();
$page = new Page($id);
$this->tpl->assign("title",$page->getTitle())
}
} -
22 января 2010 г. 12:46, спустя 4 минуты 12 секунд
kostyl, ты говоришь делать как тебе удобней, никого особо не слушать и тут же советуешь Макконнелла. Непорядочек получается.
Хотя, его не читал, спорить не стану.
В целом, у меня с ООП пока трудности, но примерное понимание некоторых вещей (для какого хуя и почему/как они есть) уже появилось.
mario, относительно твоего примера со страницами (типа это все страницы), то тут у меня своё видение: они-то страницы, но отображаются по-разному (ну это ты можешь замутить в классе нужного тебе отображения). Но вот тут, по сути, и нужно делить на "выборка данных" и "их обработка". А прикол в том, что выборка данных практически всегда будет одинаковой для одного типа страниц, но вот отображение будет уже разное, вплоть до отображения страницы БЛОГА в случае авторизированности и в случае гостевого доступа (либо же в случае отображения этой только части этой страницы блоком в другой странице). В общем, тут лучше пробовать делить на мелкие куски, и из них собирать нужное тебе. Тогда ты сможешь использовать один маленький кусочек для многих задач (например, тот же метод getPageTitle будет использоватся везде, а вот getPageTreeChildren будет юзатся только в случае такого типа, где могут быть "дети").
Хуй знает понятно ли сказал. Просто сейчас работаю с классом, написанном непонятно нахуй, потому как все, по сути, идет как обычная процедурная обработка… вот только из-за того, что работаешь через объект, то возникают проблеми. И при этом нет тех плюсов, которые дают нам классы, потому как написано оно неправильно совсем.Спустя 90 сек.CTAPbIu_MABP, и от меня спасибо - я даже кой-чего понял тута полезного для себя :) -
-
22 января 2010 г. 13:41, спустя 46 минут 31 секунду
CTAPbIu_MABP, главное, чтобы это было взаимно :)все умрут, а я изумруд -
22 января 2010 г. 13:46, спустя 4 минуты 28 секунд
kostyl, ты говоришь делать как тебе удобней, никого особо не слушать и тут же советуешь Макконнелла. Непорядочек получается.
Макконелла надо прислушиваться, всё равно рано или поздно поймешь что он прав в большинстве случаев. -
23 января 2010 г. 0:51, спустя 11 часов 5 минут 6 секунд
Есть у меня вывод всех записей блога из всех категорий. Разбиваю постранично. В page_title нужно указывать страницу.
Есть методы:
renderPages();
getEntries();
getEntriesCount(); // этот метод нужно обязательно стартануть, без него страницы не посчитаются
В каком методе устанавливать page_title? как это дело закешировать? -
23 января 2010 г. 0:56, спустя 5 минут 29 секунд
как это дело закешировать?
как кеш акешировать а то при кеше он не кешируется?
эм … чтото такое у меня от этого вопроса возниклоСпустя 27 сек.нахуй кешировать page_title? ведь это колонка таблицы, коорую ты при запросе достаешь …Сапожник без сапог -
23 января 2010 г. 1:00, спустя 3 минуты 21 секунду
это не колонка. Это <title>
Template::setData('page_title', 'Коллективные блоги - страница ' . $this->pagina->getCurrentPage() . ' - название сайта'); -
23 января 2010 г. 1:05, спустя 5 минут 24 секунды
нахуй его кешировать? не будь так параноидален)Спустя 14 сек.хы в куки закешируйСапожник без сапог
Страницы: ← Предыдущая страница • Следующая страница →
Пожалуйста, авторизуйтесь, чтобы написать комментарий!