konto usunięte

Temat: Przekazanie wartości do zmiennej w klasie.

Tak właściwie, to też głupi jestem. Ale to pewnie dlatego, że szerokim łukiem omijam szemrawe rozwiązania i stosuję np. magiczne metody do tego, do czego zostały stworzone.


class A
{
public $x;
}

class B extends A
{
function __set($attr, $value)
{
echo '!!!!';
}
}

$b = new B();
$b->x = 5;


Dodge this! ;]

konto usunięte

Temat: Przekazanie wartości do zmiennej w klasie.

Rafał Nowak:
Łukasz Karpuć:
Proceduralnie też się da, ale nie o to chodzi, żeby się dało, tylko żeby dało się najprościej i najczyściej jak się da.

Interfejsu nie da się zdefiniować.

To jest zdanie, które najbardziej mnie przekonuje.

Natomiast prawdą jest również, że istnieje wiele zastosowań w PHP, w których rzeczywiście obiekty są pewnego rodzaju strukturami.

Jeśli rozmawiamy o strukturach, to wtedy i owszem - mogą mieć takie pola. Ale chodzi też o to, aby klasa nie była w połowie strukturą, a w połowie nie. Czyli albo same publiczne atrybuty, albo operacje.
Rozumiem argument z rozwojem interfejsu, rozumiem argument z utrzymaniem spójności. Ale skoro coś po prostu jest właściwością, to czy nie wydaje wam się, że _naturalniej_ jest traktować to jako właśnie jako właściwość obiektu?

Properties? No można ;) W innych językach.
Może jestem spaczony, ale dla mnie bardziej naturalny jest zapis $user->name niż $user->getName() :)

Bo myślisz strukturalnie, a nie obiektowo ;) Obiekty wykonują operacje. Nie bierzesz gościowi pieniędzy z portfela ($user->money), tylko go o to prosisz ($user->getMoney()) a sposób w jaki on to zrobi należy już do odpowiedzialności klasy, która go opisuje. Przecież nie może ta odpowiedzialność ciążyć na Tobie.

Wspomniałeś też o wydajności metod magicznych - posiadasz może jakieś materiały na ten temat? Chętnie poczytam.

Niestety nie, aczkolwiek to naturalne, że są mniej wydajne. Kiedyś do tego doszedłem, przyjąłem jak swoje i nie kombinuję. Ale możesz zrobić proste benchmarki z użyciem microtime() i się podzielić wynikami. Może się coś zmieniło.Łukasz Karpuć edytował(a) ten post dnia 12.01.11 o godzinie 22:13

konto usunięte

Temat: Przekazanie wartości do zmiennej w klasie.

Łukasz Karpuć:
Proceduralnie też się da, ale nie o to chodzi, żeby się dało, tylko żeby dało się najprościej i najczyściej jak się da.
Nie przeczę, nie neguję a wręcz chwalę i szanuję takie podejście.

Wiem że podałeś przykład abstrakcyjny, jednak coś mi nie gra. Mianowicie tworzymy sobie klasę nie będącą potomkiem Number np. String lub Array. Metoda getValue() tych klas zwraca np. string rzutowany na int/float a w przypadku Array np. sumę wartości... mniejsza o to.

$bar->setNumber($Array);

Trzeba by dodać kolejny warunek w setNumber() obsługujący daną klasę.

Czy nie lepszym i czytelniejszym zapisem było by
$bar->number = $Array->getValue();
$bar->number = $Decimal->getValue();
$bar->number($Decimal->getValue());

z czego dwa pierwsze skreślasz z miejsca, jako bez sensu - czemu? pomijam argument o setterach i getterach, bo w tym zgadzam się w zupełności z Rafałem (się pomyliłem co do imion.

Idealną sytuacją było by:
$bar->setNumber((int) $Decimal);
ale się nie da...

---
A i owszem, dyskusja nie ma większego sensu - każdy ciut inaczej rozumie pewne kwestie i ma inne podejście do nich.
Po prostu jestem ciekaw jak inni interpretują konkretne zagadnienia i dlaczego.Michał Wachowski edytował(a) ten post dnia 12.01.11 o godzinie 22:35

Temat: Przekazanie wartości do zmiennej w klasie.

Łukasz Karpuć:
Rafał Nowak:
Rozumiem argument z rozwojem interfejsu, rozumiem argument z utrzymaniem spójności. Ale skoro coś po prostu jest właściwością, to czy nie wydaje wam się, że _naturalniej_ jest traktować to jako właśnie jako właściwość obiektu?

Properties? No można ;) W innych językach.

No właśnie interesuje mnie tutaj kwestia taka - dlaczego, mimo, że uznajemy paradygmat obiektowy za aktualnie najlepszy jaki wymyślono, inne języki są wyposażone w tego typu rozwiązania?
Może jestem spaczony, ale dla mnie bardziej naturalny jest zapis $user->name niż $user->getName() :)

Bo myślisz strukturalnie, a nie obiektowo ;) Obiekty wykonują operacje. Nie bierzesz gościowi pieniędzy z portfela ($user->money), tylko go o to prosisz ($user->getMoney()).

A, czyli to kwestia uprzejmości? ;-)
Byłbym już całkowicie przekonany do tej idei, gdyby nie to, że skoro i tak chcemy mieć metodę zwracającą nam pieniądze użytkownika to jaka jest różnica w tym, że weźmiemy je jako $user->money, jeśli w tle możemy wykonać to samo co w getMoney()? Pokuszę się o stwierdzenie, że to drugie ma jedynie źródła historyczne, a za tym argumentem przemawia obecność Properties w c#, podobne rozwiązania są również w Ruby i Pythonie.
Zawsze traktowałem obiekt jako proste odniesienie do rzeczywistości, a rzeczywiste obiekty nie zawsze po prostu wykonują dla nas czynności, czasem można z nich po prostu odczytać informację o nich samych. To już czyni mnie strukturalistą? :)

konto usunięte

Temat: Przekazanie wartości do zmiennej w klasie.

Michał Wachowski:

Czy nie lepszym i czytelniejszym zapisem było by
$bar->number = $Array->getValue();
$bar->number = $Decimal->getValue();
$bar->number($Decimal->getValue());

Nie jest tak lepiej, ponieważ przenosisz odpowiedzialność klasy Bar na inne klasy. Ich nie powinno obchodzić w jaki sposób Bar sobie przechowuje dane - to jej sprawa i zadanie, by odpowiednio dostarczone dane rzutować (tutaj na integera). Inaczej niszczymy zalety polimorfizmu (pomyślmy o tym, że po Bar dziedziczy Gamma, która nie chce wcale przechowywać danych jako integery, tylko egzemplarze klasy Float), a tym samym niszczymy 90% zalet OOP.

Na marginesie: ja wiem, że dużo potrafisz, ale myślę, że głównie polegasz na sobie (taki urok freelancerki). Ja podchodziłem podobnie, gdy miałem pełną kontrolę nad kodem - o wiele jednak przyjemniej jest zachować kontrolę w świecie chaosu, czyli pracy zespołowej z obcymi bibliotekami. Im bardziej ogólne i uniwersalne rozwiązania - tym lepiej. W ich natłoku to wręcz błogosławieństwo.

konto usunięte

Temat: Przekazanie wartości do zmiennej w klasie.

Rafał Nowak:

No właśnie interesuje mnie tutaj kwestia taka - dlaczego, mimo, że uznajemy paradygmat obiektowy za aktualnie najlepszy jaki wymyślono, inne języki są wyposażone w tego typu rozwiązania?

Nie będę roztrząsał, czy najlepszy, czy nie. OOP można stosować i w asemblerze - to jak napisałeś paradygmat, a nie własność języka. Po prostu inne lepiej go wspierają, więc możemy użyć własności obiektów zamiast akcesorów. Niemniej podział na struktury/obiekty nadal obowiązuje.

Trzeba pamiętać, że jeśli klasa zawiera same gettery i settery, to jest to struktura.

A, czyli to kwestia uprzejmości? ;-)

Poniekąd ;)
Byłbym już całkowicie przekonany do tej idei, gdyby nie to, że skoro i tak chcemy mieć metodę zwracającą nam pieniądze użytkownika to jaka jest różnica w tym, że weźmiemy je jako $user->money,

Taka, że klasa z której bierzesz kasę ustala w jaki sposób ją Ci da. Może dać Ci 2x więcej kasy, albo nic.
jeśli w tle możemy wykonać to samo co w getMoney()?

Możemy, ale z operacją możemy zrobić o wiele więcej.
Pokuszę się o stwierdzenie, że to drugie ma jedynie źródła historyczne, a za tym argumentem przemawia obecność Properties w c#, podobne rozwiązania są również w Ruby i Pythonie.

To kwestia języka i notacji. W przypadku $this->aaa nie chodzi o to, że tam nie ma nawiasów i "get", tylko o to, że takie coś nie pozwala na nic poza wydobyciem sztywno zapisanych danych.
Zawsze traktowałem obiekt jako proste odniesienie do rzeczywistości, a rzeczywiste obiekty nie zawsze po prostu wykonują dla nas czynności, czasem można z nich po prostu odczytać informację o nich samych.

Ale mogą wpływać na to, jak odbierasz ich atrybuty. Biedak może udawać bogatego - nie wszystko jest od razu jasne.

konto usunięte

Temat: Przekazanie wartości do zmiennej w klasie.

Łukasz - jako freelancer, mam to nieszczęście (tudzież szczęście, bo bywa to dość kształcące) patrzeć w kod na różnym poziomie i jakości.
Jak do tego dołożymy sytuację gdzie do programu mają dostęp osoby trzecie to się robi na prawdę wesoło.

Dla przykładu - przed świętami dzwoni były klient bo chce nowe funkcjonalności. Zerkam w kod i płaczę. "Profesjonalna firma" zajmująca się pozycjonowaniem tak nabruździła w kodzie, że połowa paradygmatów poszła do piachu w pierwszym kontrolerze.

Więc rodzi się u mnie pytanie - na cholerę się trudzić, klepać kod jak bóg przykazał, gdy z racji otwartości kodu, przyjdzie pacjent i z tylko mu znanych powodów zrobi chlew.

* profesjonalna firma, została przeze mnie sprawdzona i zdziwiłem się, że pozwalają sobie na takie jazdy.
---
Wracając do tematu:

A co powiesz na taki zapis (bo w cytowanym przez ciebie fragmencie strzeliłem gafę)


$bar->setValue( $Decimal->getValue() );


Wg mnie, jest to o tyle dobre rozwiązanie, że mamy loose coupling.

---
Kilka moich wniosków, na temat czemu warto mieć gettery i settery:
- gettery bo PHP nie umożliwia rzutowania obiektów na cokolwiek innego jak array i string.
- settery bo można zwracać $this i mamy ładne method chaining

Zaś przeciw - i to raczej moja bolączka niż ogólny problem, to praca na tablicach wielowymiarowych.

$arr = $bar->getTablica($element);
echo $arr['a']['b'];


Jakoś nigdy nie znalazłem na lepsze sposóbu.
Jeśli ktoś zna - to chętnie poznam, bo zaczyna mnie to irytować.Michał Wachowski edytował(a) ten post dnia 12.01.11 o godzinie 23:00

konto usunięte

Temat: Przekazanie wartości do zmiennej w klasie.

Łukasz Karpuć:

Ale mogą wpływać na to, jak odbierasz ich atrybuty. Biedak może udawać bogatego - nie wszystko jest od razu jasne.

Chociażby taki skromny dependency injection container - który na wywołanie metody $container->getClassName();
Sprawdza czy obiekt istnieje, jest współdzielony i w zależności zwraca odpowiednią instancję.

konto usunięte

Temat: Przekazanie wartości do zmiennej w klasie.

Michał Wachowski:
Wracając do tematu:

A co powiesz na taki zapis (bo w cytowanym przez ciebie fragmencie strzeliłem gafę)


$bar->setValue( $Decimal->getValue() );

Według mnie, nie ma potrzeby takiego zapisu. "$Decimal->getValue()" może być wywołany w "$bar->setValue()". Taki zapis jak wyżej dalej powoduje problemy w klasie Gamma, bo uzależnia ją od integerów. Lepiej przekazać obiekt (referencję), a klasa już sobie sama wybierze co jej potrzeba.

Tak sądzę.

Chociaż masz rację, że Twój przykład usuwa zależność klasy Bar od klas pochodnych Number. Zapewne takie rozwiązanie jak Twoje również ma zalety - właśnie jeśli nie chcemy uzależniać klas od siebie.
Kilka moich wniosków, na temat czemu warto mieć gettery i settery:
- gettery bo PHP nie umożliwia rzutowania obiektów na cokolwiek innego jak array i string.
- settery bo można zwracać $this i mamy ładne method chaining

Też tak można, ale... -> (1)

Generalnie po serii prób i błędów, słucham się sprawdzonych metod ;) Ze zrozumieniem oczywiście. Jeśli settery/gettery byłyby niepotrzebne, to nikt by ich nie stosował na taką skalę ;) Chociaż też bym wolał jedno głupie słowo kluczowe "property", albo coś w tym stylu (jak np. w AS3 - to jedna z niewielu dobrych cech tego języka).

(1) -> ...ale metoda powinna w idealnym przypadku jedną rzecz. Więc jeśli setter coś zwraca, to już są dwie rzeczy. Oczywiście aby stworzyć takie ładne łańcuszki w np. Builderach to się stosuje - tylko trzeba chyba pamiętać, aby tego nie nadużywać. Powód prosty: jeśli metoda ma dwa powody do zmiany a nie jeden, to mamy 2x więcej możliwości popełnienia błędu ;)

Taki chaining fajnie jednak wygląda i bywa praktyczny.

W PHP, przez wzgląd na pokazany już przykład:


class A
{
public $x;
}

class B extends A
{
function __set($attr, $value)
{
echo '!!!!';
}
}

$b = new B();
$b->x = 5;


lepiej stosować rozwiązania z Javy, a wszelkie magiczne metody traktować jako bonus ;)

Prawdę mówiąc ma deja vu, mówiące mi, że się mylę, więc czekam na wytknięcie mi błędu ;)

//EDIT: Tak ogólnie, to wszystko jest dobre, jeśli jest stosowane w odpowiednim miejscu i czasie ;) Jestem jednak za tym, aby niektóre rozwiązania były stosowane częściej, a inne rzadziej ;)Łukasz Karpuć edytował(a) ten post dnia 12.01.11 o godzinie 23:13

Temat: Przekazanie wartości do zmiennej w klasie.

Łukasz Karpuć:
Rafał Nowak:
Byłbym już całkowicie przekonany do tej idei, gdyby nie to, że skoro i tak chcemy mieć metodę zwracającą nam pieniądze użytkownika to jaka jest różnica w tym, że weźmiemy je jako $user->money,

Taka, że klasa z której bierzesz kasę ustala w jaki sposób ją Ci da. Może dać Ci 2x więcej kasy, albo nic.

Ok, poszedłem zrobić herbatę i przemyślałem kwestię, właściwie trudno już się dłużej nie zgadzać ;-)

Żeby było jasne - nie kwestionuje idei tego, że klasa powinna wpływać na zwracane dane, ale moim postulatem była implementacja tego tylko tam gdzie tego potrzebujemy, czyli używanie pól publicznych tak długo, jak nam wystarczają, a jeśli nie wystarczają, zamiana na prywatne i obsługa mutatora/akcesora poprzez __set i __get (jak np. tutaj http://www.php.net/manual/en/language.oop5.overloading... zamiast jego obligatoryjnego pisania i używania.

Wadą tego rozwiązania jest faktyczne pozostawienie rozróżnienia na własności i metody, które, choć jest naturalne, rzeczywiście może nie powinno być podane jawnie. Do wad należy też zaliczyć mniejszą wydajność w przypadku odnoszenia się do pól prywatnych oraz problemy z czystością interfejsem, kiedy część pól może pozostać publicznych, a część być dostępna przez metody.

Do zalet natomiast można z pewnością zaliczyć brak konieczności pisania dodatkowych metod w klasach, którym wystarcza publiczny dostęp. Przypuszczam też, że korzystanie z pól publicznych tam, gdzie to wystarcza, jest wydajniejsze, niż obligatoryjne wywołanie metody.

Dzięki za cenny offtop ;)
Artur Świerc

Artur Świerc Programista PHP/Java

Temat: Przekazanie wartości do zmiennej w klasie.

Magiczne metody strasznie zaciemniają kod, wydajnością bym się zbytnio nie przejmował.
Na RFC są podane bardzo ciekawe kawałki:

http://wiki.php.net/rfc/propertygetsetsyntax


public function __set($name, $value)
{
switch ($name)
{
case 'seconds':
$this->seconds = $value;
break;

case 'minutes':
$this->seconds = $value * 60;
break;

case 'hours':
$this->seconds = $value * 3600;
break;
}
}


Między innymi z tego powodu lepiej używać jawnych mutat./akces.
Lepiej już wykorzystać __call do prostych set/get, jeśli nie zostały takie stworzone.

ps/ NB sam tworzy metody na podstawie pól ;)Artur Świerc edytował(a) ten post dnia 12.01.11 o godzinie 23:20

konto usunięte

Temat: Przekazanie wartości do zmiennej w klasie.

Rafał Nowak:

Żeby było jasne - nie kwestionuje idei tego, że klasa powinna wpływać na zwracane dane,

To nie Słowo Boże, możesz kwestionować ;)
ale moim postulatem była implementacja tego tylko tam gdzie tego potrzebujemy, czyli używanie pól publicznych tak długo, jak nam wystarczają, a jeśli nie wystarczają, zamiana na prywatne i obsługa mutatora/akcesora poprzez __set i __get (jak np. tutaj http://www.php.net/manual/en/language.oop5.overloading... zamiast jego obligatoryjnego pisania i używania.

Nawyk stosowania getterów/setterów powoduje, że nie musisz myśleć, czy w tej a tej klasie zrobiłeś tak czy tak, i pozwala działać w jeden przewidywalny i uporządkowany sposób.

Nie ucz się OOP na podstawie PHP - używaj Javy i Pythona. PHP to śmietnik. Jeśli są tacy sprytni, to niech obsłużą przypadek, który podałem (klasy A i B).

Wadą tego rozwiązania jest faktyczne pozostawienie rozróżnienia na własności i metody, które, choć jest naturalne, rzeczywiście może nie powinno być podane jawnie. Do wad należy też zaliczyć mniejszą wydajność w przypadku odnoszenia się do pól prywatnych

Da się przeboleć ;) Szczególnie, że wzrasta wydajność pracy.
oraz problemy z czystością interfejsem, kiedy część pól może pozostać publicznych, a część być dostępna przez metody.

No właśnie, bo wbrew temu co niektórzy twierdzą o interfejsach, to na nich opiera się OOP.

Do zalet natomiast można z pewnością zaliczyć brak konieczności pisania dodatkowych metod w klasach, którym wystarcza publiczny dostęp. Przypuszczam też, że korzystanie z pól publicznych tam, gdzie to wystarcza, jest wydajniejsze, niż obligatoryjne wywołanie metody.

Jest jeszcze taka kwestia, że możesz dowolnie regulować poziom dostępu (read? write? read&write?) i udostępniać tylko niezbędne rzeczy.

konto usunięte

Temat: Przekazanie wartości do zmiennej w klasie.

I się wszystko wyjaśniło (przynajmniej dla mnie) prócz niebezpieczeństwa protected, bo odesłanie do książki przypomina mi linuchowe RTFM :)

Jeszcze przykład do setterów, jako ciekawostka barzdiej - Symfony2 udostępniło coś na wzór namespace np. $X->set('foo.bar', 'abc'); co w efekcie ustawia $x->arr['foo']['bar'] = 'abc';

I jeszcze kwiatek do __set() - jeden ze znanych mi systemów szablonów, używa __set() do "ukrywania" informacji o braku zmiennej :)
---
Uczenie czegokolwiek na bazie PHP z wyjątkiem samego PHP jest złe.
Tylko jak człowiek przyjdzie z "normalnego języka" do PHP, to się zdziwi, że mu class A extends B, C nie przejdzie :)Michał Wachowski edytował(a) ten post dnia 12.01.11 o godzinie 23:38

konto usunięte

Temat: Przekazanie wartości do zmiennej w klasie.

Michał Wachowski:
I się wszystko wyjaśniło (przynajmniej dla mnie) prócz niebezpieczeństwa protected, bo odesłanie do książki przypomina mi linuchowe RTFM :)

Wg mnie, mogą być po prostu o tyle niebezpieczne, bo narzucają implementację klasom pochodnym.

Jeszcze przykład do setterów, jako ciekawostka barzdiej - Symfony2 udostępniło coś na wzór namespace np. $X->set('foo.bar', 'abc'); co w efekcie ustawia $x->arr['foo']['bar'] = 'abc';

Zgaduję, że do puli obiektów.

I jeszcze kwiatek do __set() - jeden ze znanych mi systemów szablonów, używa __set() do "ukrywania" informacji o braku zmiennej :)

Zakrawa na sabotaż - ale wiem, że te najlepiej zarabiające systemy są napisane średniawo ;)

Tak na marginesie: nie chciałem nikomu narzucać mojej wizji, czy uznawać ją za jedyną właściwą - po prostu przedstawiam moją wizję.
Artur Świerc

Artur Świerc Programista PHP/Java

Temat: Przekazanie wartości do zmiennej w klasie.

Michał Wachowski:
Uczenie czegokolwiek na bazie PHP z wyjątkiem samego PHP jest złe.
Tylko jak człowiek przyjdzie z "normalnego języka" do PHP, to się zdziwi, że mu class A extends B, C nie przejdzie :)Michał Wachowski edytował(a) ten post dnia 12.01.11 o godzinie 23:38

Wadą php jest to, że na zmiany w języku trzeba czekać zbyt długo. Za dużo tam betonów, którym się nie chce rąk brudzić, wychodzą z zasady "nie ruszać g.. póki nie śmierdzi".
Pomysły są obiecujące, sam czekam m.in. na adnotacje, które w Javie sprawdzają się znakomicie - w innych językach pewnie też. Przy pomocy phpdoc'a to wg mnie bajpas.

konto usunięte

Temat: Przekazanie wartości do zmiennej w klasie.

Artur Świerc:

Wadą php jest to, że na zmiany w języku trzeba czekać zbyt długo. Za dużo tam betonów, którym się nie chce rąk brudzić, wychodzą z zasady "nie ruszać g.. póki nie śmierdzi".

Ale ono najpierw śmierdzi, potem kamienieje i się rozpada :P
Pomysły są obiecujące, sam czekam m.in. na adnotacje, które w Javie sprawdzają się znakomicie - w innych językach pewnie też. Przy pomocy phpdoc'a to wg mnie bajpas.

Przez takie protezy przestałem czekać ;)

Ale offtopowo nie będę pisał - poprzednie wpisy miały jakiś sens w kontekście wątku :D

konto usunięte

Temat: Przekazanie wartości do zmiennej w klasie.

Aj karamba - zaspany coś dziś jestem.
Miało być __get() a nie __set w systemie szablonów.

No właśnie, owe niebezpieczeństow, jest względne.
Skoro dajmy na to ja, ustawiłem klasie pola public/protected to widocznie miałem powód i pochodne mają tak mieć. Rzekłem - ja, autor klasy bazowej.

Inna rzecz, związana z niejako z setterami i getterami (skoro już oftopujemy na potęgę) - czyli "rzutowanie" obiektu na tablicę.
Czy $arr = (array) $Obj, czy $arr = $Obj->castArray() ?
Raczej to drugie - bo przy privatach rzutowanie zwraca niezłe śmieci.Michał Wachowski edytował(a) ten post dnia 12.01.11 o godzinie 23:55

konto usunięte

Temat: Przekazanie wartości do zmiennej w klasie.

Michał Wachowski:
Aj karamba - zaspany coś dziś jestem.
Miało być __get() a nie __set w systemie szablonów.

No właśnie, owe niebezpieczeństow, jest względne.
Skoro dajmy na to ja, ustawiłem klasie pola public/protected to widocznie miałem powód i pochodne mają tak mieć. Rzekłem - ja, autor klasy bazowej.

Inna rzecz, związana z niejako z setterami i getterami (skoro już oftopujemy na potęgę) - czyli "rzutowanie" obiektu na tablicę.
Czy $arr = (array) $Obj, czy $arr = $Obj->castArray() ?
Raczej to drugie - bo przy privatach rzutowanie zwraca niezłe śmieci.

Najpierw moje deja vu, bo potem mogę nie mieć czasu, a znajdzie się ktoś, kto się przyczepi ;)

O polimorfizmie. To co mówiłem o


$x->a = 5;


jest prawdą, ale o


$x->setA($b->getValue());


już niekoniecznie. Jak mówiłem, interfejsy są najważniejsze. Jeśli obiekt $x ma interfejs wymagający integerów, to tak należy to przekazywać oczywiście. Moje poprzednie przykłady mówiły de facto o przeciążaniu metody w PHP, co ma swoje zastosowania.

Teraz o to co w tym wpisie. Wg mnie lepszą opcją jest "arr = $Obj->castArray()" (a jeszcze lepiej "toArray()") - z tego prostego powodu, że mamy kontrolę nad kształtem zwracanej tablicy (nic nie stoi na przeszkodzie, by w implementacji było "return (array)$this;"), i jest to zdefiniowana operacja klasy. Oczywiście to kwestia wsparcia języka. Python ze swoją metodą magiczną np. __int__() standaryzuje to, dzięki czemu nie musimy się zastanawiać co lepsze i co wymyślił inny programista.Łukasz Karpuć edytował(a) ten post dnia 13.01.11 o godzinie 08:39

konto usunięte

Temat: Przekazanie wartości do zmiennej w klasie.

// błądŁukasz Karpuć edytował(a) ten post dnia 13.01.11 o godzinie 08:38



Wyślij zaproszenie do