![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 47 Pomógł: 0 Dołączył: 25.12.2009 Ostrzeżenie: (0%) ![]() ![]() |
Witam!
Postanowiłem przepisać jeden projekt napisany w C# do PHP. Mam taką oto klasę:
DataRow to wiersz tablicy. Trochę czytałem (uczę się dopiero OOP). Wyczytałem, iż standardowe metody __get i __set działają trochę inaczej niż w przypadku C#. W sumie to z grubsza chodzi mi o przykładowy kod, który byłby analogiczny do tego w C# powyżej (w php oczywiście). Nie mam pomysłu jak zaimplementować ten wiersz tablicy. Dziękuję. Ten post edytował Grzesiek23 12.03.2011, 17:26:04 |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
1. PHP nie wspiera partial classes - będziesz musiał złączyć wszystko w jeden plik.
2. PHP nie wspiera modyfikatorów dostępu dla klas - wszystkie są niejako publiczne. 3. W PHP wszystkie niefinalne metody są wirtualne. 4. PHP nie wspiera "właściwości" (get/set). __get() / __set() nie mają z tym za wiele wspólnego. Musisz utworzyć "klasyczne" gettery i settery. |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 226 Pomógł: 61 Dołączył: 20.08.2010 Ostrzeżenie: (0%) ![]() ![]() |
1. W PHP nie ma partial - klasę zapisz jako całosć
2. Właściwości przerób na settery/gettery żeby zachować zgodność z konwencją w PHP 3. Wszystkie metody są domyślnie wirtualne 4. http://en.wikipedia.org/wiki/PHPDoc 5. Stosowanie $this przy dostępie do elementów obiektu jest wymagane [EDIT] Spóźniłem się, ale 4 i 5 może się przydać, więc nie usuwam posta. Ten post edytował Noidea 12.03.2011, 18:17:29 -------------------- |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 47 Pomógł: 0 Dołączył: 25.12.2009 Ostrzeżenie: (0%) ![]() ![]() |
Dzięki Panowie
![]() Rozjaśniliście mi trochę temat ![]() ![]() Odnośnie tych właściwości (gwoli ścisłości) na przykładzie wiersza Page, powinienem napisać getPage i setPage, tak? |
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Cytat Odnośnie tych właściwości (gwoli ścisłości) na przykładzie wiersza Page, powinienem napisać getPage i setPage, tak? Dokładnie tak.
|
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 47 Pomógł: 0 Dołączył: 25.12.2009 Ostrzeżenie: (0%) ![]() ![]() |
A mam takie pytanie.
Przeglądałem kilka skryptów i zastanawia mnie różnica między "->" a "::". Gdzieś przeczytałem, iż "::" stosuje się przy statycznych klasach, ale skrypty, które widziałem nie były zadeklarowane jako statyczne. Czym się różni "->" a "::". Kombinowałem trochę, ale jakoś nie mogę tego pojąć. Zauważyłem też, iż jeśli odwołam się od jakiejś funkcji klasy przez "::" to wywala błąd jeśli w funkcji używam odwołania do jej wnętrza "$this->..." |
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 690 Pomógł: 92 Dołączył: 6.02.2011 Ostrzeżenie: (0%) ![]() ![]() |
:: - odwolanie do stattycznej funkcji klasy, tzn. takiej, którą można wykonać bez konstruowania klasy
-> odwołanie do zwykłej funkcji(statycznej też), często ze zmiennej, np. $this, albo ze zmiennej, która jest obiektem danej klasy @EDIT: Właśnie chodzi o to, że jeśli zadeklarujesz funkcję statyczna, nie możesz się odwoływać do innych funkcji klasy przez $this Ten post edytował mat-bi 24.03.2011, 17:44:28 |
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#9
|
|
![]() Grupa: Zarejestrowani Postów: 651 Pomógł: 28 Dołączył: 4.12.2004 Ostrzeżenie: (0%) ![]() ![]() |
Nikt tu nie wspomniał też o tym, że w PHP nie deklarujesz typów danych (zwracana wartość funkcji oraz zmienne). Możesz te dane jedynie później rzutować, aby wymusić konkretny typ.
-------------------- Sygnatura niezgodna z regulaminem.
|
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 11 Pomógł: 0 Dołączył: 15.06.2011 Ostrzeżenie: (0%) ![]() ![]() |
To nie do końca prawda, możesz specyfikować typ danych w definicji metod:
We wnętrzu metod statycznych nie możesz uzywać $this, ponieważ referencja ta wskazuje na obiekt, który w przypadku boków statycznych nie istnieje. Odpowiednikiem dla referencji na klasę jest self, np:
Natomiast wywołania tych metod:
|
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 890 Pomógł: 65 Dołączył: 13.11.2005 Skąd: Olsztyn Ostrzeżenie: (0%) ![]() ![]() |
To nie do końca prawda, możesz specyfikować typ danych w definicji metod: (...) To też nie do końca prawda - tylko obiekty (/interfejsy, i siłą rzeczy - tablice) PS. Czemu Ty @sarxos bawisz się w archeologię? Masz zamiar docelowo wypowiedzić się w każdym temacie w tym dziale, niezależnie od daty jego utworzenia (czy raczej daty ostatniego postu)? ;> |
|
|
![]()
Post
#12
|
|
![]() Grupa: Zarejestrowani Postów: 651 Pomógł: 28 Dołączył: 4.12.2004 Ostrzeżenie: (0%) ![]() ![]() |
To nie do końca prawda, możesz specyfikować typ danych w definicji metod:
To, co napisałem wcześniej jest prawdą. Oczywiście, że można podać typ, ale robi się to rzadko i w konkretnych przypadkach. PHP ma dynamiczne typowanie i nie trzeba deklarować typów (ale można, jeśli ktoś bardzo chce, lecz tylko w niektórych miejscach i tylko wybrane typy, które zostały już wymienione - resztę można jedynie rzutować). Ten post edytował Speedy 15.06.2011, 16:10:38 -------------------- Sygnatura niezgodna z regulaminem.
|
|
|
![]()
Post
#13
|
|
![]() Grupa: Administratorzy Postów: 1 552 Pomógł: 211 Dołączył: 7.07.2009 Skąd: NJ ![]() |
A ja myślę, że autor znalazł odpowiedź na swoje pytanie 2 miesiące temu
![]() |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 15.06.2025 - 22:27 |