PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи

Страниц (2): [1] 2 »

> Найдено сообщений: 21
Opo6ac Отправлено: 17 Августа, 2011 - 17:44:21 • Тема: Наследование методов и их переопределение • Форум: Объектно-ориентированное программирование

Ответов: 3
Просмотров: 4679
LIME, да, можно, в принципе, и так. Тогда и родительский switch можно будет "закрыть" default кейсом, который будет возвращать false - удобно будет для проверки на существование свойства (чтобы isset() не трогать)

Спасибо за свежую мысль) - плюсик поставить не могу, статус не позволяет.

О!... ничего не понял, но сделав предложенную замену, исправил баг, который уже отчаялся сегодня пофиксить. Двойное спасибо!)
Opo6ac Отправлено: 17 Августа, 2011 - 16:31:38 • Тема: Наследование методов и их переопределение • Форум: Объектно-ориентированное программирование

Ответов: 3
Просмотров: 4679
Модификацию наследуемого метода в данном случае осуществил так:
PHP:
скопировать код в буфер обмена
  1.   function &__get($name){
  2.     if(parent::__get($name)) return parent::__get($name);
  3.  
  4.     switch($name){
  5.  
  6.       case 'afisha_config':
  7.         return $this->cities;
  8.       break;
  9.     }
  10.   }


Благодарю за внимание.
LEVEL UP! Радость
Opo6ac Отправлено: 17 Августа, 2011 - 13:07:57 • Тема: Эмуляция перегрузки в PHP, метод __call() • Форум: Объектно-ориентированное программирование

Ответов: 12
Просмотров: 5126
Мелкий, ага, я уже проникся проблемой. Оказывается, оно даже в 6й версии не планируется.
Будьте так любезны, посмотрите соседнюю тему - я там пытаюсь как раз.. вот теперь даже не знаю, как называется то, что я пытаюсь делать. Наверное, переопределить метод с сохранением прежнего функционала.
Opo6ac Отправлено: 17 Августа, 2011 - 11:32:00 • Тема: Эмуляция перегрузки в PHP, метод __call() • Форум: Объектно-ориентированное программирование

Ответов: 12
Просмотров: 5126
Мелкий пишет:
romantik2011, в PHP нет перегрузки методов и функций. А __call вызывается только тогда, если не определён запрашиваемый метод.

Минуточку, а что такое тогда интерфейсы? - ведь при последующей реализации они как раз перегружаются.
Opo6ac Отправлено: 17 Августа, 2011 - 10:46:00 • Тема: ООП __GET и массивы • Форум: Объектно-ориентированное программирование

Ответов: 5
Просмотров: 4441
JustUserR, спасибо. Вчитался, поэкспериментировал - удалось получать элемент по ссылке. Хотя возникла проблема с наследуемыми классами и переопределением __get()
Открыл под этот вопрос отдельную тему с подробным описанием.
Opo6ac Отправлено: 17 Августа, 2011 - 09:32:12 • Тема: Наследование методов и их переопределение • Форум: Объектно-ориентированное программирование

Ответов: 3
Просмотров: 4679
Добрый день.
Помогите разобраться с наследованием и переопределением методов в дочернем классе.

Итак, есть "корневой" класс system. Есть класс afisha, который extends system. И есть класс afisha_cities, который extends afisha.

В "корневом" классе описывается геттер:
PHP:
скопировать код в буфер обмена
  1.   function &__get($name){
  2.     if(property_exists(__CLASS__,$name)){
  3.       return $this->$name;
  4.     } else {
  5.       switch($name){
  6.         case 'users':
  7.           $this->users = $this->read_data('system.users');
  8.           return $this->users;
  9.           break;
  10. ... другие кейсы опустил...

Примечание: существует ряд свойств, которые могут подгружаться различными методами по требованию - для того и нужен геттер, чтобы не лепить множество проверок на существование свойства.

В классе afisha этот геттер переопределяется:
PHP:
скопировать код в буфер обмена
  1.   function &__get($name){
  2.     parent::__get($name);
  3.     switch($name){
  4.       case 'cities':
  5.         $this->cities = $this->get_cities();
  6.         return $this->cities;
  7.       break;
  8.     }
  9.   }

Примечание: в дочернем классе появляются свои свойства, которые нужно подгружать по первому требованию. Но при этом не нужно забывать про старые свойства из system. Именно для этого переопределяя в дочернем классе геттер, я упоминаю родительский геттер и только потом добавляю еще кейсов для автозагрузки.
Примечание: родительский геттер "не закрывается", то есть он или return значение при наличии соответствующего кейса, или ничего не возвращает. Default кейса нет.

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

если я спрошу:
var_export( $this->user );
то вернется NULL

Но если спросить в такой последовательности:
$this->user;
var_export( $this->user );
то вернется требуемое значение

В общем, помогите понять, где собака зарыта.


Дополнение: геттер однозначно рабочий, он проверялся на другом потомке (как бы второго поколения) system с тем отличием, что в потомке никакой перегрузки геттера не было. Он просто наследовался как обычно и срабатывал, как ожидается.
Opo6ac Отправлено: 11 Августа, 2011 - 14:42:57 • Тема: ООП __GET и массивы • Форум: Объектно-ориентированное программирование

Ответов: 5
Просмотров: 4441
Господа, изменилась ли ситуация в актуальной (5.3) версии PHP?
Честно говоря, я так и не понял, как мне геттером получить значение $this->arr['some_item'], ведь в __get() в таком случает будет передано только "arr", без ключа.
Opo6ac Отправлено: 20 Июня, 2011 - 10:40:20 • Тема: Вакансия: РНР-программист • Форум: Объявления

Ответов: 14
Просмотров: 2821
Мелкий, вы второй раз уже отвечаете, невнимательно прочитав предыдущее.
Нет, не пробовали. И нет санкций пробовать.
Нужен квалифицированный программист, который дополнительно возьмет на себя часть текучки.

Мужики, я не спрашиваю у вас совета - кого и на какую должность брать. Это - вакансия. Заинтересовало? - пишите. Нет? - не флудите.
Opo6ac Отправлено: 20 Июня, 2011 - 09:45:06 • Тема: Вакансия: РНР-программист • Форум: Объявления

Ответов: 14
Просмотров: 2821
DeepVarvar, в офисе дюже не хватает эникейщика или админа... или админа-эникейщика) и в этом вся проблема. Чисто админских вопросов не много, но полно всякой чепухи менеджерской, с уклоном в айти. И их частенько (особенно вопросы посложнее) вешают на "технический отдел". А так как в семье не без урода, то с некоторых менеджеров приходит Оочень много работы. И ведь не поспоришь - я действительно верю, что именно этот менеджер с подобными заданиями не справится в виду своих умственных способностей. И так как админа гендир брать не хочет (а менеджера точно не уволят), то решили брать массой. То есть взять в штат дополнительных программистов. С одной стороны, это даже весело - не заскучаешь. Но кто намерен ТОЛЬКО программировать, чисто кодинг, то тем не советую к нам идти ибо не получится так.
Opo6ac Отправлено: 17 Июня, 2011 - 16:40:36 • Тема: Вакансия: РНР-программист • Форум: Объявления

Ответов: 14
Просмотров: 2821
Stierus, нет, не выгодно. Здесь довольно много постоянной работы, с которой один человек не справляется. Плюс ко всему проекты, которые требуют длительной и постоянной разработки + поддержка.
Сайты мы как раз не клепаем. Человек, вон, догадался посмотреть на домен, который указан для отправки резюме - ужаснулся, наверное. Тем не менее, на сайте описано, чем фирма занимается.
Opo6ac Отправлено: 17 Июня, 2011 - 16:23:09 • Тема: Вакансия: РНР-программист • Форум: Объявления

Ответов: 14
Просмотров: 2821
DeepVarvar, ты уколол меня за самое больное...(((
С тех пор как я пришел работать на свое место, я уже не раз говорил гендиру, что сайт нужно переверстывать. Что это убого. Но, ***ТЬ, какой только х**** не занимаюсь, но только не программированием - на сайт, видите ли, времени не предусматривается. Именно по этой причине - нехватка рабочих рук - и ищется дополнительный человек.
Opo6ac Отправлено: 16 Июня, 2011 - 14:34:12 • Тема: getimagesize не понимает имена с пробелами • Форум: Графика в PHP

Ответов: 14
Просмотров: 5965
А вы уверены, что в файловой системе вообще существует такой файл?

balloon 20 uid 201111211.gif - да
balloon+20+uid+201111211.gif - нет
Opo6ac Отправлено: 16 Июня, 2011 - 14:11:26 • Тема: Вакансия: РНР-программист • Форум: Объявления

Ответов: 14
Просмотров: 2821
Мелкий, ну, всякое может быть.
А вы по делу в тему зашли или так, расслабиться немного?)
Если что, пишите на почту - на нее я быстрее реагирую.
Opo6ac Отправлено: 16 Июня, 2011 - 13:50:38 • Тема: Вакансия: РНР-программист • Форум: Объявления

Ответов: 14
Просмотров: 2821
Мелкий, а зачем мне распинаться перед всеми подряд, тем более перед тем, кто не видит названия города в заголовке темы? Я стою на позиции того, кто выбирает.
Opo6ac Отправлено: 16 Июня, 2011 - 13:28:30 • Тема: Вакансия: РНР-программист • Форум: Объявления

Ответов: 14
Просмотров: 2821
Доброго дня, коллеги.
Открыта вакансия РНР-программиста в офис, на полный рабочий день.
Помимо уверенного владения РНР, понимания принципов ООП и применения их на практике, не лишним будут:
-- хорошие навыки верстки
-- знание JS
-- знание РНР-фреймворков

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

Девушкам по дефолту +1 в карму и приоритет при собеседовании ;)

Резюме лучше сразу отправлять на gk[a]marva-trade.ru

Страниц (2): [1] 2 »
Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB