IMHO.WS

IMHO.WS (http://www.imho.ws/index.php)
-   Веб-программирование (http://www.imho.ws/forumdisplay.php?f=29)
-   -   wrapper Klass в PHP (http://www.imho.ws/showthread.php?t=47254)

shuron 29.12.2003 19:20

wrapper Klass в PHP
 
привет! Помогите написать так называемый wrapper Klass который можно написат с помощью функции overload()
это понятие помойму из C++ но поскольку я им не владею сказать с увереностью не могу.
ну примерно смысл в том что мне будет достаточно работать с этим классом вместо того чтобы мучатся с набором классов.
Вы скажете делай extends (inheritance) блин не помню как это слово по русски. но это сдеь не подойдет по смыслу

мож кто знает как это сделать?

Stasik 30.12.2003 02:34

a? extend по русски это наследование... а что ты от мне хочешь, я так и не понял

shuron 30.12.2003 04:27

хмм да это не легко понять.. это вобще мне helldomain про это рассказал да вот не дорассказал.
короче пишу движок для странички, образовались различные классы. типа
error, mysql, upload, vars и т.д. вот как ты правильно подметил хотел я ихз всех наследованием связать. ну скажем error -> mysql -> upload -> view.
работать то работало бы, но помсоветовал мне он (а он чувак знающий!)
что мол делай wrapper klass.

RaZEr 30.12.2003 09:14

Не припомню в своей практике случая, чтобы в PHP нужна была обертка (class wrapper) для всех классов сразу. Что касаемо класса, который можно написать с помощью overload(), то это ф-ия которая добавляет к классу методы set, get и call, и причем тут wrapper не очень понятно.

shuron 30.12.2003 16:08

да я вот с этой обёрткой вроде разобрался..
он мне типа тако го чето обьячнял
class Wrap
{
var Mysql
var Error
var Vars

....
}

как я понимаю теперь надо подумать как сделать что бы Wrap имел все функци
этих классов. типа construction kit он становится...
вроде так. може теперь придумаешь?
ато у меня в кождом новом скрипте приходится возится с кучкой класов.

Добавлено через 1 минуту:
или ты всегда наследованием пользуешся, несмотря ни на что?

RaZEr 30.12.2003 16:13

RTFM короче.

shuron 30.12.2003 23:09

RTFM ??

helldomain 31.12.2003 01:03

RTFM - Read This Fucking Manual.

Добавлено через 4 минуты:
Na samom dele eto ne sowsem wrapper. Eto bolshe t.n. kit class. Klass s funkciyami wishego urownya, sozdajushij sebe wse objekti. A to, chto imelos w widu pod overload() eto i est wrapper chast - reakciya na popitki zapisi/chteniya/wizowa.

RaZEr 31.12.2003 01:06

В чем суть наворота?

shuron 31.12.2003 01:09

да вот в чём суть то вроде ясно.Сказал бы он мне как замутить этот наворот!! было бы дело!!!
наследственность дествительно не катит я заметил

Saruman 31.12.2003 01:23

shuron
Если я правильно понял, тебе нужно завести один класс, который внутри себя инстанцирует все младшие (читай - более низкого уровня) классы. Затем в этом классе ты создаешь методы, которые могут при своей работе вызывать _несколько_ методов низкоуровневых классов. Т.е.
PHP код:

class myHigh {
    var 
$lowClass1;
    var 
$lowClass2;

    function 
myHigh() {
        
$lowClass1 =& new lowClassNumber1();
        
$lowClass2 =& new lowClassNumber2();
    }

    function 
myHighFunc() {
        
$sRes $this->lowClass1->lowMethod();
        
$sRes2 $this->lowClass2->lowMethod2($sRes);
        return(
$sRes2);
    }


При этом у тебя класс myHigh будет скрывать детали реализации низкоуровневых методов от внешних пользователей.

PS: а вообще, найди книжку по паттернам проектирования и почитай - полезно.

shuron 02.01.2004 22:04

Да что-то в этом роде я и имел в виду... так это тоже можно сделать. спасибо.
но есть в PHP ещё и метода overload и вот с ней можна этот класс сделать удобней
ну нутром чую если так хотите.. :))
но не знаю как..

Stasik 02.01.2004 22:16

а нафига это? :) чтобы круто было?

RaZEr 02.01.2004 22:21

2 Stasik: Щас это модно, понимаешь ;)

shuron 02.01.2004 22:33

эх юмаристы...

писанины меньше три метода будет на весь класс и пофиг сколько в нем вложено классов
а так как Saruman написал это слишком специально. и немного не то что я хотел..
короче сам докопаюсь если будет работать то нештяк.

helldomain 08.01.2004 13:20

Budet ono rabotat, budet.

shuron 08.01.2004 23:19

helldomain

вот и подсказал бы! а-то заварил кашу!!:)) и даже спецы форума в недоумении:)):yees:

helldomain 12.01.2004 02:45

Nu chto ya mogu sdelat, takaya u menya logika jestokaya.

shuron 12.01.2004 15:21

да я заметил.. :))

helldomain 13.01.2004 07:41

Prawda? Zahochetsya paradoksow - zwoni ;-).

P.S. Ya ne blondinka.

shuron 13.01.2004 20:18

ги ги! да я в курсе что ты не блондинка, и не брюнетка:))
Я в Феврале займусь опять посерьёзнее страничкой и весь мусор, что я напрограмировал буду упорядочивать, и вот тогда "враппер" класс то и понадобится.. вот тогда и буду тебе названивать и Асю загружать вопросами..:biggrin: ночи на пролёт:)
Пока набирайся сил, наслаждайся тишиной(перед бурей), можешь даже соскучиться немного...:biggrin:

P.S. помойму я понял почему ты был против моей конструкции наследственности. Я ведь на jave "воспитан"
а там с extends с разу наследуется и Typ и Code. Тоесть там даже нет этого различия между subtyping и
subclassing. Но если думать логически то, например Klass MySQL никак не Subtype класса Error и если я зделаю extends то subtyping будет хилый..
Это примерно то, что ты иммел ввиду тем что, предложаный мной вариант наследственности противоречит OO- концептам? или я намутил уже слишком глубоко?

helldomain 13.01.2004 20:42

E! Primerno tak. Liubaya model doljna bit ne tolko prawilna s tochki zreniya koncepcij, no doljna eshe obladat kakoi-to logikoi. Smisl delat nasledowanie Error->MySQL->Chto_Nit_Eshe, esli MySQL ne ispolzuet error, a Chto_Nit_Eshe ne ispolzuet mysql s errorom???

shuron 13.01.2004 21:06

а вот в том то и дело что в моей задумке использовалось бы всё!!!

helldomain 13.01.2004 21:19

Da, no odna komponenta ne ispolzuet druguju. W tom-to i fokus. Pochitai, dlya chego nujno nasledowanie. Ya ne imeju w widu ispolzowanie konechnim prilojeniem, a ispolzowanie komponent mejdu soboi.

Saruman 13.01.2004 22:25

Разрешите внести свои два цента в беседу? 8)

Насколько я понял shuronа, ему нужен класс, который мог бы использовать методы и mysql, и error. Так, может, имеет смысл не использовать наследование и не плодить монстров, а просто инстанцировать экземпляры этих классов из того, который в них нуждается? Или даже, если _несколько_ классов нуждаются в доступе к mysql и error, то использовать паттерн singleton и инстанцировать их один раз, а потом работать с одним и тем же объектом из всех классов.

Или я где-то в корне неправ?

helldomain 14.01.2004 07:02

Tak ya emu o tom i glagoliu.

shuron 14.01.2004 23:21

задумка вобще такая была:
Всё начинается с ошибки... :)) первый класс это error он реагирует на ошибки и в зависимости от вида ошибки решает что с ней делать(сообшить пользователю, послать мне мыло и.т.д)
потом MySQL наследует и исплоьзут класс error, например если не смог "конектица" то вызывыешь функцию класса error...
на третьм шаге у меня есть уже больше классов которы используют MySQl и естевствено error.
Я бы так всё это и сделал если бы не сомневался что есть лучшее решения... потому то на третем уровне и выше некоторые класы в "дереве наследования" мне не используются.
Сейчас я так и делаю как вы описали, просто инстанциирую нужные классы...

но всёже от error можно и понаследовать остальным классам где ошибки могут возникнуть

А в остальном хочу просто понять как это вы там с wrappe'рами или
Цитата:

" паттерн singleton и инстанцировать их один раз, а потом работать с одним и тем же объектом из всех классов "
как это сделать?
ПРИМЕР ДАЙТЕ....

Добавлено через 2 минуты:
да знаю я для чего наследование, читал не раз

Saruman 14.01.2004 23:33

shuron
Путь наименьшего сопротивления 8)
Берешь в аттаче файл singleton - это скрипт, реализующий на php данный паттерн. Затем думаешь, какие объекты в твоем дизайне должны существовать в единственном экземпляре. Затем работаешь следующим образом.
1. Сначала инициализируешь singleton:
PHP код:

require_once('singleton.php');
singleton::init(); 

2. Затем, при инстанцировании объекта, делаешь это не напрямую, а через паттерн:
PHP код:

$myObject =& $GLOBALS['SINGLETON']->getInstance(myObjectClassName); 

Если у тебя этот объект еще не существовал - он будет создан. В дальнейшем все запросы будут получать ссылку на _уже_имеющийся_ объект, не создавая новые экземпляры того же класса.

PS: на phpclasses.org есть более новая версия singleton.php, но она значительно переписана и наследуется от PEAR. Зачем это сделано я еще не разбирался, если есть интерес - качай и смотри. Общий принцип должен быть тем же самым.

PPS: сходи в книжный магазин и найди книгу Эриха Гаммы "Паттерны проектирования". Прочитай - узнаешь много полезного.

shuron 20.01.2004 21:33

Цитата:

PPS: сходи в книжный магазин и найди книгу Эриха Гаммы "Паттерны проектирования". Прочитай - узнаешь много полезного.
да сегодня в универе про "Паттерны слушал" ипро эту книгу тоже говорили..
как-нибудь прочту. Просто всё это легче понять людям которые имеют опыт, я пока не много в своей жизни написал:)

А singleton.php разве это ... относится к wrapper'ам? singleton же вроде допускает только чтобы один Обьнкт был сосдан с Класса?

Saruman 20.01.2004 21:40

shuron
А я и не говорил, что относится, я тебе предложил метод решения твоей проблемы. Со своими врапперами сам разбирайся, я пока толком не понял, что вы с хеллом под этим подразумеваете.

shuron 21.01.2004 21:26

Saruman
угу..

А вобще это тоже потернчик может правда у него и второе название есть "kit " или даже "construction kit"
Короче он добавляет дополнительные возможности в класс.. без наследования...
ладно в феврвле поговорим года разбурусь..
щас время нет..

helldomain 22.01.2004 07:21

Ehh Shuron, wremeni kak takowogo net woobsche. Eto fiktiwnaya proizwodnaya funkcii jisni.

shuron 23.01.2004 00:27

эхх "х...домаин" :)) планированию поддается с трудом...

helldomain 23.01.2004 04:53

Daa, h{...}domain zwuchit ochen dwulichno ;-).

is_absent 28.01.2004 13:56

Почитай вот такую доку.
http://www.phppatterns.com/index.php...leview/28/1/2/

Вроде бы все понятно.
Перегрузка операторов вещь всегда полезная.

shuron 28.01.2004 16:18

домайн!!

:biggrin:

Добавлено через 1 минуту:
@_is_absent
угу это вроде бы то и есть... :))
мучос грациос, лови 5

is_absent 29.01.2004 14:14

shuron

Ну спасибо. А вообще сначала надо родную доку копать... :)

helldomain 29.01.2004 18:44

Doku kopat ne nado. Ee nado ostorojno liubit, chto-bi ne umirala.

RaZEr 29.01.2004 19:12

Цитата:

Ee nado ostorojno liubit
и уважать :biggrin:

PS: Хелл, кончай флудить. Какой пример ты подаешь юзерам.

shuron 29.01.2004 21:34

RaZEr

да ладно тебе флудить, мы же это... у нас тут интимная обстановка... ;)


Часовой пояс GMT +4, время: 05:40.

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.