object parent?

25 отговора 632 прегледа Заключена
#1

object parent?

zdr...
imam slednia case:


class A
{
function A($a1, $a2)
{
$this->a1=$a1;
$this->a2=$a2;
}
}

class B
{
function B($b1)
{
$this->b1=$b1;
$this->items='';
}

function add($c1, $c2)
{
$this->items[]=new A($c1, $c2);
}
}



ta vaprosa mi e: kak/dali moga da imam dostap v A() do properties na objecta ot class B, bez da go predavam kato parameter na constructora A? t.e.:


class A
{
function A($a1, $a2)
{
$this->a1=$a1;
$this->a2=$a2.(???$parent???->b1);
}
}


Just a genius

Отговор
в отговор на Blake #2

Re: object parent?

това са различни класове.
къв парент кви 5 лева ?

E tuk ni6to niama :[линк]
Отговор
в отговор на Blake #3

Re: object parent?

напиши по-свястно примера и въпроса

и все пак, ако имаш:

class A {
...
}

class B extends A {
...
}

във клас Б можеш да викаш неща от клас А посредством parent::method_na_A() примерно

Отговор
в отговор на ro6avia #4

Re: object parent?

heheh

parent e, shtot se poluchava taka che imam class B, v koito imam masiv s elementi ot class A... t.e vizualno si go predstavi po slednia nachin:
c:\
+dir 1
+dir 2

kadeto c:\ e "parent" class-a (B), a dir1 i dir2 sa mu children ot class A...
znam che ne e tochno parent v istinskia smisal, ama...

demek da prodalja s primera - predstavi si che iskam ot constructora, koito sazdava "dir1" da razbera kolko e svobodnoto myasto na "c:\" (koeto se yavyava property na "c:\")

Just a genius

Отговор
в отговор на anonymous #5

Re: object parent?

ne, tva go videh v manula-a, ama moya sluchai ne e takav...

Just a genius

Отговор
в отговор на Blake #6

Re: object parent?

дефакто нямаш никаква връзка между класовете. ти искаш да вземеш проперти от истанция на клас Б или да имаш релация , тоест какво точно искаш да направиш с това
$this->a2=$a2.(???$parent???->b1);

--
Ела в мафията
Отговор
в отговор на voyager #7

Re: object parent?

znachi da poyasnya pak s primera s direktoriite:
imam class Drive

$c=new Drive("c:\")

class Dir
{
function Dir($name)
{
$this->name=$name;
$this->freespace=???
(tuka trebe da zema freespace-to ot t.nar. ot men "parent" element,
koito e object ot class Drive, i koito vika new Dir() )

}
}

class Drive
{
function Drive($letter)
{
$this->letter=$letter;
$this->directories=array();
$this->freespace=get_free_space();
}

function addDir($name)
{
$this->directories[]=new Dir($name);
}
}

$c=new Drive("c:\");
$c->addDir("Temp");
$c->addDir("Windows");
...



takaaa...
interesuva me tva chervenoto kak stava bez da predavam $this->freespace kato attribut na Dir();

p.s. V deistvitelnost rabotata ne e za direktorii, ama misla che taka e lesno da se shvane kva e ideata...

Just a genius

Отговор
в отговор на Blake #8

Re: object parent?

абе нещо пак май не се разбираме

ако примерът е този, който пишеш, то защо не направиш в AddDir
$this->directories[]=new Dir($name);
$this->freespace -= "големината" на директорията (от инстанцирания обект, т.е. в класа имаш $size)

freespace-а не ти е property на директорията, а на drive-а



Отговор
в отговор на anonymous #9

Re: object parent?

abe sega ne se hvashtai za primera bukvalno... situaciata e savsem razlichna, prosto se opitvam choveshki da obyasnya tova koeto mi trebe...
prosto priemi che Dir-objecta trebe da znae freespace-a na Drive-objecta, koito go e sazdal

Just a genius

Отговор
в отговор на Blake #10

Re: object parent?

За да е по-ясно съм взел вместо "А" - "Student" и вместо "В" - "University". Идеята, е че унито знае, колко кои студенти са записани, но и студента знае, в кои университет учи.


Ето и примерен код:

class Student
{
var $studiesAt;

function Student()
{}

function Student(&$university) {
$this->studiesAt = $university;
}

function setUniversity(&$university) {
$this->studiesAt = $university;
}
}

class University
{
var $students = array();
var $num_buildings;

function University($num) {
$this->num_buildings = $num;
}

function getNumBuildings()
{
return $this->num_buildings;
}

function add($student) {
$student->setUniversity($this);
$students[] = $student;
}

}

$university = new University(5);
$stud1 = new Student;
$university->add($stud1);

//Kolko sgradi ima v universiteta, koito u4a?
$n = $stud1->studiesAt->getNumBuildings();





А и за "обектни" въпроси, дори за пхп май е по-добре (за сега) да питаш в Програмисти, Java или .NET

Не насилвайте нещата - вземете по-голям чук.
Отговор
в отговор на s_dimi #11

Re: object parent?

tva dobre, ama vij che vse pak predavash neobhodimata informacia kato parameter v setUniversity()...
pri men sluchaya e takav che trebe da predam 20-tina razlichni properties, i mi se struva che ako ima po-avtomatichen nachin, shte e po-dobre nyakak si...

Just a genius

Отговор
в отговор на Blake #12

Re: object parent?

За да приключим въпроса типично по бългаски ще кажа, че няма как да стане . В един пълноценен ООП език (всъщност дали не ставаше и в пхп5?) това може да се постигне ако А ти е вътрешен клас на Б. Но в случая просто нямаш връзка между двата класа. Б има инстанции на а, но това е абсолютно същото ако те не бяха в Б, а създадени отвън.
Мисля си, че щом ти трябва достъп до толкова пропертита от Б в А, най-вероятно трябва да си препишеш обектния модел. Всъщност дали ти трябват обекти?

--
Ела в мафията
Отговор
в отговор на voyager #13

Re: object parent?

abe tryabvat mi po nekolko prichini... i zasega dobre stava...
taka kato gledam sha naprava 1 method na "golemia" class deto predava instancia na "malkia"... taka sha si resha problemite yavno...

Just a genius

Отговор
в отговор на Blake #14

Re: object parent?

Ми важното е да бачка . Требе да стане така

--
Ела в мафията
Отговор
в отговор на Blake #15

Re: object parent?

хехехе . представям ти го визуално:

сега ти си представи че имам 5 лева в мен и 10 лева в банката

като си бръкна в джоба как ще си видя банковото извлечение

E tuk ni6to niama :[линк]
Отговор
в отговор на voyager #16

Финален резултат от дискусията

1. Момъка има идея (само той си я знае) какво иска но не може да го обясни
2. Отговарящите имат идея какво трябва да се направи, но не разбират въпроса (защото за да зададеш коректен и конкретен въпрос трябва да знаеш поне 50% от отговора)
3. ООП - то е хубаво нещо , НО трябва да се спазват принципи !!!!

E tuk ni6to niama :[линк]
Отговор
в отговор на Blake #17

Re: object parent?

а бе май и ти не знаеш какъв ти е случая ама аз започвам да се досещам :-))))
Чети какво са ти написали !!!

E tuk ni6to niama :[линк]
Отговор
в отговор на ro6avia #18

Re: object parent?

mnogo prosto, trebe bankovoto izvlechenie da ti se namira veche tam (tva e koeto mi trebe na mene)...

Just a genius

Отговор
в отговор на Blake #19

Re: object parent?

като си бъркам в джоба по-надълбоко най често напипвам нещо друго там ....

с което отгаварям на двата ти въпроса

E tuk ni6to niama :[линк]
Отговор
в отговор на ro6avia #20

Re: object parent?

параблема е очевиден :)

ами да ти кажа, най-добре май май ще е да запечаташ добавянето на нови елементи към този масив в един метод, при който освен създаването на нова инстанция на обекта се присвоява и property _parent. По разните GoF принципи говорят за Factory, където се създава абстракция за създаване на нови обекти...

Потърси - [линк] - линка, който винаги давам като се отвори приказка за OOP :).

Отговор