Michał Sosnowski

Michał Sosnowski grafik/webmaster

Temat: OOP - wartość zmienne na własność

Witam

Jak z wartości zmiennej zrobić część nazwy własności obiektu
Dla przykładu :

$zmienna = 'user_';

$account = new Account;
$account -> $zmienna_password

$zmienna_password - tu by musiała być własność o nazwie 'user_password'

Dzięki za pomoc

konto usunięte

Temat: OOP - wartość zmienne na własność

Eeeeeeee...

$zmienna = 'user_password';

$account = new Account;
$account->$zmienna;


??

Swoją drogą wnioskuję po konstrukcji że będziesz sięgał po magię (__get(), __set()). 3x się zastanów czy warto...Dariusz Półtorak edytował(a) ten post dnia 12.12.11 o godzinie 15:02

konto usunięte

Temat: OOP - wartość zmienne na własność

Albo stwórz metodę do wywoływania zmiennych wg jakiegoś wzoru.
Michał Sosnowski

Michał Sosnowski grafik/webmaster

Temat: OOP - wartość zmienne na własność

Dariusz Półtorak:
Eeeeeeee...

$zmienna = 'user_password';

$account = new Account;
$account->$zmienna;


$account->$zmienna; - to doskonale wiem i rozumiem Twoje 'Eeeeeee..' ;)
lecz mi chodzi o zmienność przedrostka... ponieważ własności to nie będzie tylko '_password', ale też inne(ładowane z bazy)

konto usunięte

Temat: OOP - wartość zmienne na własność

Michał Sosnowski:
Dariusz Półtorak:
Eeeeeeee...

$zmienna = 'user_password';

$account = new Account;
$account->$zmienna;


$account->$zmienna; - to doskonale wiem i rozumiem Twoje 'Eeeeeee..' ;)
lecz mi chodzi o zmienność przedrostka... ponieważ własności to nie będzie tylko '_password', ale też inne(ładowane z bazy)

Ponownie... Eeeeeeeee...

$zmienna = 'user_';

$account = new Account;

$get = $zmienna.'password';
$account->$get;

$get = $zmiena.'hehe';
$account->$get;

$get = $zmienna.'foo';
$account->$get;


Ty chyba nie programujesz za bardzo prawda ? Skoro do zmiennej możesz wsadzić ciąg znaków i za jego pomocą odpalić metodę albo wyciągnąć wartość atrybutu to chyba jasne że wystarczy przestawiać wartość tej zmiennej.
Chyba że czegoś nie zrozumiałem...

konto usunięte

Temat: OOP - wartość zmienne na własność

Dariusz Półtorak:
Eeeeeeee...

$zmienna = 'user_password';

$account = new Account;
$account->$zmienna;


??

Swoją drogą wnioskuję po konstrukcji że będziesz sięgał po magię (__get(), __set()). 3x się zastanów czy warto...
Błędne założenie. Nie każdy jest fanatykiem enkapsulacji (ja nie jestem). Toż to mogą być publiczne parametry.


echo $Object->{$var.'_password'};


Choć osobiście odradzam takie coś. Lepiej będzie stworzyć metodę

public function getPassword($prefix) {
return $this->{$prefix.'_password'};
}


Niby to samo, ale jakoś czytelniej będzie.

PS. Klamry to dziwna rzecz w PHP'ie, dzięki nim można robić bardzo złe rzeczy. Choć dokumentacja mówi, że ich zrobić "nie można". :)Michał Wachowski edytował(a) ten post dnia 12.12.11 o godzinie 15:58

konto usunięte

Temat: OOP - wartość zmienne na własność

Michał Wachowski:
Dariusz Półtorak:
Eeeeeeee...

$zmienna = 'user_password';

$account = new Account;
$account->$zmienna;


??

Swoją drogą wnioskuję po konstrukcji że będziesz sięgał po magię (__get(), __set()). 3x się zastanów czy warto...
Błędne założenie. Nie każdy jest fanatykiem enkapsulacji (ja nie jestem). Toż to mogą być publiczne parametry.

Owszem. Ale zauważ że gdyby tak było to... po co mu taki "twór" ? Obstawiam że tworzy je dynamicznie. Więc zapewne ma jakąś wewnętrzną tablicę którą będzie tak uzupełniał. Bo po co tworzyć tak dynamiczne atrybuty kiedy później "latanie po nich" jest utrudnione ?


echo $Object->{$var.'_password'};


Choć osobiście odradzam takie coś. Lepiej będzie stworzyć metodę

public function getPassword($prefix) {
return $this->{$prefix.'_password'};
}


Niby to samo, ale jakoś czytelniej będzie.

Skoro przerzucamy się na metody to te dane już lepiej zrobić w wewnętrznej tablicy i przykryć to taką metodą niż ciągnąć farsę. Od strony użytkownika kodu nic się nie zmienia a pod spodem będzie to logiczniejsze.

PS. Klamry to dziwna rzecz w PHP'ie, dzięki nim można robić bardzo złe rzeczy. Choć dokumentacja mówi, że ich zrobić "nie można". :)

Ale czasami lepiej zrobić jedno paskudne rozwiązanie niż 10 ładnych. Ostrzeżenie jest dla ludzi którzy dostając młotek wszędzie widzą gwoździe :P
Michał Sosnowski

Michał Sosnowski grafik/webmaster

Temat: OOP - wartość zmienne na własność

Michał Wachowski:
Choć osobiście odradzam takie coś. Lepiej będzie stworzyć metodę

public function getPassword($prefix) {
return $this->{$prefix.'_password'};
}


Niby to samo, ale jakoś czytelniej będzie.

PS. Klamry to dziwna rzecz w PHP'ie, dzięki nim można robić bardzo złe rzeczy. Choć dokumentacja mówi, że ich zrobić "nie można". :)

dzięki właśnie o to mi chodziło.. Jakie złe rzeczy można zrobić jeśli chodzi o ten przypadek??

konto usunięte

Temat: OOP - wartość zmienne na własność

Dariusz Półtorak:
Błędne założenie. Nie każdy jest fanatykiem enkapsulacji (ja nie jestem). Toż to mogą być publiczne parametry.

Owszem. Ale zauważ że gdyby tak było to... po co mu taki "twór" ? Obstawiam że tworzy je dynamicznie. Więc zapewne ma jakąś wewnętrzną tablicę którą będzie tak uzupełniał. Bo po co tworzyć tak dynamiczne atrybuty kiedy później "latanie po nich" jest utrudnione ?
Pytasz się niewłaściwej osoby.
Jest pytanie - jest odpowiedź.
Niczego nie zakładałem, nie wnikałem. Za dużo w życiu "cudów" widziałem by snuć domysły.
Dariusz Półtorak:
Niby to samo, ale jakoś czytelniej będzie.

Skoro przerzucamy się na metody to te dane już lepiej zrobić w wewnętrznej tablicy i przykryć to taką metodą niż ciągnąć farsę. Od strony użytkownika kodu nic się nie zmienia a pod spodem będzie to logiczniejsze.
Dla ciebie - tak.
Dla mnie - niekoniecznie. Zależy od sytuacji.
Dariusz Półtorak:

PS. Klamry to dziwna rzecz w PHP'ie, dzięki nim można robić bardzo złe rzeczy. Choć dokumentacja mówi, że ich zrobić "nie można". :)

Ale czasami lepiej zrobić jedno paskudne rozwiązanie niż 10 ładnych. Ostrzeżenie jest dla ludzi którzy dostając młotek wszędzie widzą gwoździe :P


$Collection = new ArrayObject(array('foo', 'bar'), 2);
var_dump($Collection->{0});
var_dump($Collection->{1});

Dokumentacja nie ostrzega, dokumentacja wyraźnie mówi, że się nie da :)

Wszędzie widzisz młotki, kochasz je? :)

PS. @Michał Sosnowski - jak o to chodziło, to plusik się należy.Michał Wachowski edytował(a) ten post dnia 12.12.11 o godzinie 17:34
Artur Świerc

Artur Świerc Programista PHP/Java

Temat: OOP - wartość zmienne na własność

Michał Wachowski:
Błędne założenie. Nie każdy jest fanatykiem enkapsulacji (ja nie jestem). Toż to mogą być publiczne parametry.

Enkapsulacja, byłby to ciekawy temat do dyskuji.

Hermetyzacja, oraz refaktoryzacja kodu do hermetyzacji - powinny to być domyślne czynności każdego programisty :) Uniknęlibyśmy wtedy wielu "kwiatków". Oczywiście nie mówię tutaj tylko i wyłącznie o private, public itp, bo to tylko czubek góry lodowej, ale o metodach, klasach i bibliotekach.

konto usunięte

Temat: OOP - wartość zmienne na własność

Załóż więc, będzie o czym rozmawiać.

konto usunięte

Temat: OOP - wartość zmienne na własność

Michał Wachowski:


$Collection = new ArrayObject(array('foo', 'bar'), 2);
var_dump($Collection->{0});
var_dump($Collection->{1});

Od zarania dziejów do indeksowania tablic używa się nawiasów kwadratowych. Nie wiem skąd to nagminne stosowanie obiektów i ich strzałeczek. Operator [] też się da nadpisać.

konto usunięte

Temat: OOP - wartość zmienne na własność

Michał Wachowski:

public function getPassword($prefix) {
return $this->{$prefix.'_password'};
}



public function setPrefix($prefix){
$this->prefix = $prefix;
}
public function getPassword() {
return $this->{$this->prefix.'_password'};
}


Tak jest poprawnie. Do tego hermetyzacja działa jak należy.

konto usunięte

Temat: OOP - wartość zmienne na własność

Łukasz K.:

public function setPrefix($prefix){
$this->prefix = $prefix;
}
public function getPassword() {
return $this->{$this->prefix.'_password'};
}


Tak jest poprawnie. Do tego hermetyzacja działa jak należy.
Super, tylko weź to później debuguj. Jak znaleźć w kodzie wywołania metody user_password?

konto usunięte

Temat: OOP - wartość zmienne na własność

Tomasz K.:
Łukasz K.:

public function setPrefix($prefix){
$this->prefix = $prefix;
}
public function getPassword() {
return $this->{$this->prefix.'_password'};
}


Tak jest poprawnie. Do tego hermetyzacja działa jak należy.
Super, tylko weź to później debuguj. Jak znaleźć w kodzie wywołania metody user_password?

W którym miejscu masz takie wywołanie?

Nieważne, takie podejście jest mocno patologiczne i tak (w sensie prefiksowania), ale może komuś przydatne. Jak dla mnie powinien to ciągnąć z tablicy

return $this->data[$this->prefix . '_password'];

jeśli już musi, albo przy wczytywaniu odpowiednio ustawiać pola. Ciężko powiedzieć do czego to to, mój przykład odniosłem do przekazywania prefiksu do gettera.
Bartosz Turkot

Bartosz Turkot Graphics Software
Engineer, Intel
Technology Poland

Temat: OOP - wartość zmienne na własność

Zdebugować można wszystko i na szczęście bardzo łatwo, za pomocą znanego wszystkim var_dump() i debug_print_backtrace(). Ja osobiście nie stosuje magicznych przypisań, wiele obecnych IDE posiada funkcje ctrl+spacja, co pozwala na szybkie i czytelne przeglądanie wszystkich metod i właściwości, które dany obiekt posiada. Odwoływanie się do czegoś za pomocą $obiekt->{$zmienna.'cośtam'}, sprawia że jej nie zobaczymy dopóki nie odpalimy na obiekcie var_dump'a lub nie dojdziemy do tego analizując kod, co znowu przekłada się na czas, a to z kolei na koszty.

To są oczywiście tylko moje odczucia, w pracy zawsze liczę się z tym, że ktoś jeszcze po mnie kiedyś będzie ten kod pielęgnował ;)

konto usunięte

Temat: OOP - wartość zmienne na własność

aaaa. ..dyskutujecie o błędnej interpretacji OOP i złych nawykach.

konto usunięte

Temat: OOP - wartość zmienne na własność

Jak kolega - Ojciec tego postu, zadaje takie pytania, lepiej podać pare linków do tutoriali, a nie od razu się podniecać, jakby to było i jak kto lubi. _get i set_ ? eeeeh.
Odwoływanie się bezpośrednio do właściwości? ?? ?

Następna dyskusja:

Wzorzec Reaktora OOP w php




Wyślij zaproszenie do