Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

7 Stron V   1 2 3 > » 

Zyx
Napisane: 21.07.2011, 21:08:11





Grupa: Zarejestrowani
Postów: 952
Dołączył: 20.01.2007
Skąd: /dev/oracle

Ostrzeżenie: (0%)
-----

Tobie też by się takie ćwiczenie przydało, skoro napisałeś taki post smile.gif. W jednym masz rację: słowo abstract też powinno znaleźć się na liście słów zakazanych, bo bez extends nie ma sensu smile.gif.

A czemu, przecież napisałem:

Cytat
(...) to jest istota programowania obiektowego ogołocona ze wszystkich ogłupiaczy. Dopiero gdy się tego nauczysz, będziesz wiedział, że cała reszta to zwykły lukier składniowy i pomoc, która jednak jest pomocą tylko wtedy, gdy znajduje się w doświadczonych rękach.


Programowanie obiektowe to nie są klasy abstrakcyjne, static czy extends. To sposób myślenia i projektowania. Dopóki ktoś się go nie nauczy, będzie jedynie programistą, który umie używać klas oraz dziedziczenia i nic poza tym. Klasy abstrakcyjne, dziedziczenie i cała reszta to jedynie narzędzia i lukier składniowy. OK, dziedziczenie nie do końca się do tego zalicza, ale akurat jest jedną z bardziej zwodniczych koncepcji. Naucz się najpierw dobrze podstaw, a później siadaj za pulpitem sterowniczym elektrowni jądrowej.

--- [odpowiedź dla kilera] ----

Który sposób będzie tam poprawny? Nie ma na to pytanie jednej odpowiedzi, może poza tym, że ID to ja bym jako argument przekazywał, jeśli już smile.gif. Zapytasz się mnie, co w sytuacji, gdy identyfikacja wiersza wymaga większej liczby pól, a ja Ci odpowiem: niech argument z identyfikatorem będzie obiektem implementującym interfejs Identifier. Wtedy sobie zaimplementujesz różne typy identyfikatorów, jakie masz w aplikacji i będziesz mógł nimi operować w sposób uniwersalny. To jest właśnie przykład obiektowego podejścia.

A dlaczego żadnemu z Twoich sposobów nie można nadać etykietki "poprawny"/"niepoprawny"? Ponieważ tutaj to już tak naprawdę zależy od tego, co chcesz zrobić i co te Twoje obiekty mają reprezentować. Metoda #2 to zwykłe mapowanie obiektowo-relacyjne, gdzie obiekty reprezentują jeden wiersz w bazie. Jest to popularne, zwłaszcza w zastosowaniach typu CRUD, natomiast do bardziej zaawansowanych rzeczy ja preferuję metodę #1 ze wspomnianą już modyfikacją, ponieważ jest ona bardziej ogólna i mniej przekombinowana w przypadku złożonych schematów.

Co do przykładu z cache, to wyjaśnij mi, czym to, co zrobiłeś, różni się od wywołania funkcji np. apc_get(), albo zwykłego wstawienia global? Ja Ci już podpowiem prawidłową odpowiedź, że absolutnie niczym. Przede wszystkim kto powiedział, że potrzebujesz dokładnie jeden obiekt cache'u? Pomyśl. Cache'ujemy różne rodzaje danych, różne rodzaje danych mają różne wymagania (cykliczne aktualizacje, aktualizacje na żądanie, dłuższe, krótsze itp. itd.)? Wprowadzasz tu pojęcie zasobu (np. "konfiguracja", "dane", "kod HTML"), polityki (czyli jakiej funkcjonalności oczekujesz od cache'u) oraz strategii (czyli już konkretna implementacja). Politykę kodujesz jako interfejs, strategię jako klasę implementującą ten interfejs, a zasób jako pytanie do menedżera obiektów strategii "panie, podaj mi tu obiekt, który potrafi cache'ować zasób z rodziny 'konfiguracja'". Dostajesz obiekt, upewniasz się co do obsługiwanej przez niego polityki, robisz operacje i po sprawie. Chcesz zmienić strategię dla konkretnego zasobu, w menedżerze rejestrujesz dla niego inną strategię i tyle.

Cytat
Problem jest jednak taki, że nie mam za bardzo czasu na dokładne teoretyczne studiowanie tego tylko uczę się przy okazji stałego rozwijania CMSu (który bądź co bądź na mnie zarabia poniekąd).


Dlatego radzę Ci, byś zostawił tego CMS-a w takim kształcie, jak on jest (ew. nie bawił się tu na razie w obiektówkę), a zaoszczędzony czas poświęcił na jakieś prostsze ćwiczenia. Szkoda marnować i wspomniany czas, i CMS-a nieudolną przebudową. CMS Ci nie ucieknie, a dzięki temu później zrobisz go lepiej i szybciej. Ja np. bardzo żałuję, że w czasach, gdy miałem swoje pierwsze próby z klasami (11 lat temu), nie było nikogo, kto by mi powiedział to, co napisałem teraz Tobie, przez co mnóstwo mojej pracy poszło na marne.
  Forum: Object-oriented programming · Podgląd postu: #883629 · Odpowiedzi: 10 · Wyświetleń: 1 379

Zyx
Napisane: 21.07.2011, 20:19:11





Grupa: Zarejestrowani
Postów: 952
Dołączył: 20.01.2007
Skąd: /dev/oracle

Ostrzeżenie: (0%)
-----

Niestety nie są sensowne. Znalazłem kolejny błąd. Tworzenie obiektu nie jest częścią wywoływania metody - owszem, trzeba to zrobić, ale to robisz RAZ. Dlaczego zatem w pętli wliczasz do wywoływania metody czas tworzenia obiektu?

Cytat
Tutaj faktycznie logiczniej jest tworzyć obiekt i ew. zostawiać część metod statycznych.


Nie przekręcaj mojej wypowiedzi. Napisałem jasno, że metody statyczne powinniśmy tworzyć tylko wtedy, gdy wiemy co robimy, co oznacza, że 99% programistów nie powinno używać ich w ogóle. Nie mówię tu o braku umiejętności (chociaż z drugiej strony... smile.gif), ale o tym, że ich tak naprawdę w ogóle nie potrzebują. Twój problem akurat wybitnie należy do kategorii problemów, gdzie static nie ma żadnego logicznego uzasadnienia.

Cytat
A jeśli chodzi o klasy z wszystkimi statycznymi metodami to wydaje mi się, że ma to sens w wypadku gdy coś jest często używane w dużej ilości miejsc kodu gdzie przekazywanie uchwytu nie daje korzyści a jest upierdliwe (np. klasa do cache).


To źle Ci się wydaje. Argument "bo jest używane w dużej liczbie miejsc" to brednia do kwadratu, bowiem wtedy musiałbyś w ogóle przestać stosować obiektówkę do większości rzeczy. Co to w ogóle jest "uchwyt do klasy"? Z przykładem z cache też trafiłeś, jak kulą w płot - jest to jeden z fajniejszych tematów do modelowania obiektowego i robiąc tam wszystko statycznie byś go dokumentnie rozwalił.

Ogólnie powiem tak: znasz składnię, wiesz jak działają obiekty, klasy, elementy statyczne. Jednak to, że potrafisz dwie cegły spoić cementem, nie czyni jeszcze z Ciebie architekta. Umiesz używać klas i obiektów, natomiast o programowaniu obiektowym nie masz zielonego pojęcia. Co bym Ci radził na początek, to zostawienie CMS-a i rozpoczęcie od paru ćwiczeń, w trakcie których nie wolno Ci używać słów kluczowych global, static, extends (a i owszem) oraz metod, których nazwy zaczynają się od __, z wyjątkiem __construct() i __destruct(). Ba, powiem nawet więcej: modelując system, powinieneś wręcz zapomnieć o pojęciu klasy, bowiem jak sama nazwa programowanie obiektowe wskazuje, operujemy tu na obiektach i tylko na obiektach, a klasa to jedynie wygodny schemat do tworzenia obiektów o podobnych zadaniach. Co, że restrykcyjne? Nie, to jest istota programowania obiektowego ogołocona ze wszystkich ogłupiaczy. Dopiero gdy się tego nauczysz, będziesz wiedział, że cała reszta to zwykły lukier składniowy i pomoc, która jednak jest pomocą tylko wtedy, gdy znajduje się w doświadczonych rękach.
  Forum: Object-oriented programming · Podgląd postu: #883615 · Odpowiedzi: 10 · Wyświetleń: 1 379

Zyx
Napisane: 21.07.2011, 17:22:20





Grupa: Zarejestrowani
Postów: 952
Dołączył: 20.01.2007
Skąd: /dev/oracle

Ostrzeżenie: (0%)
-----

Masz błąd w teście: statycznie wywołujesz metodę niestatyczną i na odwrót, ale wyniki generalnie masz w miarę OK - wywołanie metod statycznych jest wolniejsze niż niestatycznych. Różnice nie są wprawdzie duże, ale są.

Elementy statyczne w klasach z formalnego punktu widzenia nie mają z programowaniem obiektowym nic wspólnego, ponieważ jak programowaniem obiektowym może być coś, gdzie nie mamy obiektów? Na dobrą sprawę nie wnoszą one zbyt wiele do większości języków programowania. W Javie są one nawet przydatne, ale dlatego, że nie ma tam w ogóle funkcji. W PHP ich zastosowanie ogranicza się wyłącznie do podlegania automatycznemu ładowaniu i modyfikatorom dostępu. Ja od jakiegoś czasu mam bardzo prostą zasadę:

* pól statycznych nie używam w ogóle,
* metody statyczne używam tylko wtedy, gdy naprawdę wiem, co robię i że mi naprawdę jest to potrzebne.

Poza tym wszystko jedzie na obiektach. Jeśli faktycznie cały mechanizm odpalania akcji będzie zgodny z zasadami projektowania obiektowego, to wtedy zauważysz, że Twój ostatni listing to nieporozumienie smile.gif.
  Forum: Object-oriented programming · Podgląd postu: #883578 · Odpowiedzi: 10 · Wyświetleń: 1 379

Zyx
Napisane: 13.07.2011, 09:48:53





Grupa: Zarejestrowani
Postów: 952
Dołączył: 20.01.2007
Skąd: /dev/oracle

Ostrzeżenie: (0%)
-----

Wzorca gotowego nie ma, natomiast istnieją rozmaite metodyki określające, jakie dokumenty muszą powstawać, jaki jest ich cel i kiedy są realizowane.

Najbardziej biurokratyczne podejście to tzw. model kaskadowy składający się z sześciu faz, w trakcie których powstaje kilka różnych, coraz bardziej szczegółowych dokumentacji, zaś kodowanie wszystkiego (i weryfikacja) jest dopiero na końcu. Przejście do następnej fazy robione jest dopiero wtedy, gdy efekt dotychczasowej został ukończony, przejrzany i zatwierdzony. Mimo dużej ilości dokumentów, podejście to jest dość kosztowne, czasochłonne i mało odporne na zmiany wymagań. Dlatego stosowane jest dość rzadko i w zasadzie głównie do projektów, gdzie wymagania są dobrze poznane i istnieją uwarunkowania prawne, które wymagają takiego, a nie innego podejścia (np. aplikacje wojskowe). Do normalnego oprogramowania lepiej jest wykorzystać bardziej elastyczne metody, gdzie dokumentów jest mniej, a za to więcej jest kodowania i testowania tego, co już zostało zrobione:

- model iteracyjny - wykonujemy jedynie ogólny projekt systemu oraz planujemy iteracje. W każdej iteracji planujemy szczegółowo wycinek funkcjonalności, implementujemy go i testujemy. Dzięki temu doprecyzowywanie wymagań może uwzględniać wyniki testów wcześniejszych faz.
- model prototypowy - najpierw robimy prototyp, by sprawdzić czy dobrze zrozumieliśmy klienta, a później robimy dokumentację, opisujemy wyniki testów i implementujemy właściwy system.
- model spiralny - dość ogólny model nieco podobny do modelu iteracyjnego; bez rysunku ciężko mi go opisać smile.gif.

Dodatkowo masz programowanie zwinne wykorzystujące niektóre z powyższych modeli i nastawione przede wszystkim na samą implementację i częstą inspekcję tego, co się właściwie tworzy.

W zależności od wybranego modelu trzeba stworzyć mniej lub więcej dokumentacji, która zawiera różną ilość informacji. Na pewno można wyróżnić specyfikację wymagań funkcjonalnych. Cały system jest tu rozbity na pojedyncze wymagania, odpowiednio nazwane i ponumerowane. Każde z nich ma opis, informacje o tym, kto będzie je wykonywać, warunki jakie muszą zajść, aby wymaganie mogło być przez system wykonane, opis efektu końcowego, scenariusz użycia...

Generalnie o tym można by pisać i pisać. Napisano o tym całe mnóstwo książek, na studiach miałem to wałkowane przez parę semestrów, więc temat jest rozległy, a co więcej - teoria jest dość trudna do zastosowania w praktyce, gdyż każdy projekt jest inny. Liczy się tu intuicja, umiejętność przewidywania i planowania; łatwo wyczuć, kiedy ktoś postępuje według instrukcji z książki i "nie czai, o co w tym chodzi".
  Forum: Kontrola i zarządzanie projektami · Podgląd postu: #881285 · Odpowiedzi: 3 · Wyświetleń: 2 014

Zyx
Napisane: 11.06.2011, 11:35:39





Grupa: Zarejestrowani
Postów: 952
Dołączył: 20.01.2007
Skąd: /dev/oracle

Ostrzeżenie: (0%)
-----

Podstawy PHP się kłaniają:

mysql_errno(), mysql_error()

Na przyszłość polecam przynajmniej spróbować zajrzeć do manuala.
  Forum: PHP · Podgląd postu: #871527 · Odpowiedzi: 2 · Wyświetleń: 509

Zyx
Napisane: 28.05.2011, 11:20:13





Grupa: Zarejestrowani
Postów: 952
Dołączył: 20.01.2007
Skąd: /dev/oracle

Ostrzeżenie: (0%)
-----

Dlatego, że odwołujesz się do niego w kodzie, który nie znajduje się ani w klasie MyClass, ani MyClass2.
  Forum: Object-oriented programming · Podgląd postu: #867378 · Odpowiedzi: 4 · Wyświetleń: 946

Zyx
Napisane: 25.05.2011, 06:50:24





Grupa: Zarejestrowani
Postów: 952
Dołączył: 20.01.2007
Skąd: /dev/oracle

Ostrzeżenie: (0%)
-----

Tak, to jest to. Jeszcze w sumie należy pamiętać, że wtedy tekst zapisujemy w apostrofach:

Kod
<link rel="stylesheet" parse:href="$odpal~'cosdodatkowego'" media="screen" />


http://static.invenzzia.org/docs/opt/2_0/b...xpressions.html
  Forum: Systemy szablonów · Podgląd postu: #866341 · Odpowiedzi: 3 · Wyświetleń: 2 049

Zyx
Napisane: 26.05.2011, 14:32:46





Grupa: Zarejestrowani
Postów: 952
Dołączył: 20.01.2007
Skąd: /dev/oracle

Ostrzeżenie: (0%)
-----

Jak sobie klikniesz w jeden z dwóch linków widocznych w mojej stopce, będziesz mieć nawet dwa przykłady pokazujące kilka klas i zgodne z tym nazewnictwem smile.gif.
  Forum: Oceny · Podgląd postu: #866809 · Odpowiedzi: 12 · Wyświetleń: 1 897

Zyx
Napisane: 26.05.2011, 09:55:23





Grupa: Zarejestrowani
Postów: 952
Dołączył: 20.01.2007
Skąd: /dev/oracle

Ostrzeżenie: (0%)
-----

To jest zwykły standard nazewnictwa i tam nie ma nic do rozumienia. Po prostu nazywasz klasy tak, jak jest podane i to wszystko.
  Forum: Oceny · Podgląd postu: #866745 · Odpowiedzi: 12 · Wyświetleń: 1 897

Zyx
Napisane: 20.05.2011, 18:10:20





Grupa: Zarejestrowani
Postów: 952
Dołączył: 20.01.2007
Skąd: /dev/oracle

Ostrzeżenie: (0%)
-----

Nie musisz ustalać sam ze sobą nazewnictwa klas, katalogów i plików, bo po co komu "n+1szy standard nazewnictwa, który nie jest z niczym kompatybilny"? Poczytaj sobie o PSR-0, zobacz na zasady nazewnictwa w Symfony 2 / Zend Framework 2 i użyj jednej z gotowych ładowarek klas dla tego standardu. Unikniesz mnóstwa niepotrzebnych problemów, a jak Ci coś fajnego wyjdzie, będziesz mógł tego z marszu używać w połączeniu z normalnymi platformami bez konieczności przepisywania kodu.

Jeśli chodzi o koncepcję i zgodność z założeniami wzorca, to zasadniczo jest OK. Oczywiście od strony rozszerzalności czy konfigurowalności masz sporo rzeczy zakodowanych na sztywno, ale to już jest cecha konkretnej implementacji, a nie zgodności ze wzorcem. Tu szczególnie przyczepię się do jednego:

Kod
<?php

class model extends DB


Hehe, od kiedy to model jest odpowiedzialny za komunikację z bazą danych? Nie bez powodu mówi się, że mechanizm dziedziczenia pozwala na tworzenie bardziej wyspecjalizowanych klas. Specjalizacja = dostosowanie bardziej ogólnej funkcjonalności do bardziej szczegółowego przypadku, a nie dodanie nowej funkcjonalności. Czy pobranie produktów jest jedną z operacji służących do komunikacji z bazą danych? Nie. Ono z tej komunikacji jedynie korzysta, czyli nie używamy dziedziczenia.
  Forum: Oceny · Podgląd postu: #865063 · Odpowiedzi: 12 · Wyświetleń: 1 897

Zyx
Napisane: 14.05.2011, 12:58:03





Grupa: Zarejestrowani
Postów: 952
Dołączył: 20.01.2007
Skąd: /dev/oracle

Ostrzeżenie: (0%)
-----

A materiały do nauki częściowo zależą od tego, na jaką uczelnię delikwent się wybiera oraz na jaką informatykę. Zresztą prawda jest taka, że jak ktoś nie umie myśleć, to nawet po przeczytaniu 100 książek nie przetrwa pierwszego roku na przyzwoitej uczelni. Tak samo z językami programowania - co komu z tego, że zna np. 7 języków, kiedy nie potrafi z nich nic konkretnego poskładać? Co komu z tego, że zacznie od C++, kiedy język ten primo i tak uczony jest od podstaw, a secundo - nie będzie wiedział, co się tam w ogóle dzieje?
  Forum: Hydepark · Podgląd postu: #863228 · Odpowiedzi: 41 · Wyświetleń: 9 481

Zyx
Napisane: 6.05.2011, 20:44:35





Grupa: Zarejestrowani
Postów: 952
Dołączył: 20.01.2007
Skąd: /dev/oracle

Ostrzeżenie: (0%)
-----

Pokaż ludziom dowolną książkę o Javie. DI jest tam znane od wieków i powstały już pewnie ze dwie tony opracowań o jego wyższości nad statycznymi metodami oraz singletonami.
  Forum: Object-oriented programming · Podgląd postu: #861167 · Odpowiedzi: 12 · Wyświetleń: 1 730

Zyx
Napisane: 3.05.2011, 12:43:54





Grupa: Zarejestrowani
Postów: 952
Dołączył: 20.01.2007
Skąd: /dev/oracle

Ostrzeżenie: (0%)
-----

Z nauką frameworków jest tak, jak z językami programowania. Znasz jeden, drugi poznajesz dwa razy szybciej. Znasz dwa, trzeci poznajesz dwa razy szybciej. Znasz trzy... wszystko to kwestia doświadczenia, reszta to niuanse API i podejścia twórców. Jednak bez OOP zbyt wiele nie zwojujesz.
  Forum: Object-oriented programming · Podgląd postu: #860179 · Odpowiedzi: 29 · Wyświetleń: 4 839

Zyx
Napisane: 9.04.2011, 08:06:11





Grupa: Zarejestrowani
Postów: 952
Dołączył: 20.01.2007
Skąd: /dev/oracle

Ostrzeżenie: (0%)
-----

Polecam poczytać, jak wykonujemy zapytania SQL... bo na pewno nie tak, jak napisałeś...
  Forum: PHP · Podgląd postu: #853467 · Odpowiedzi: 9 · Wyświetleń: 793

Zyx
Napisane: 3.04.2011, 08:26:02





Grupa: Zarejestrowani
Postów: 952
Dołączył: 20.01.2007
Skąd: /dev/oracle

Ostrzeżenie: (0%)
-----

Algorytm prostego sortowania przez wstawianie się kłania. Przebieg pętli składa się z trzech faz:

1. Szukasz miejsca do wstawienia
2. Wstawiasz element
3. Przesuwasz wszystkie obiekty o jedną pozycję do przodu.

Przesuwanie robi się bardzo prosto. Jesteś na pozycji X w tablicy. Zapamiętujesz jej obiekt w zmiennej tymczasowej A, a na pozycję wstawiasz obiekt ze zmiennej tymczasowej B. Następnie przepisujesz obiekt ze zmiennej A do B. Tyle. Pierwszą wartość zmiennej B bierzesz z pozycji tablicy, pod którą wstawiasz nowy element.
  Forum: PHP · Podgląd postu: #851468 · Odpowiedzi: 5 · Wyświetleń: 1 950

Zyx
Napisane: 17.05.2011, 20:35:12





Grupa: Zarejestrowani
Postów: 952
Dołączył: 20.01.2007
Skąd: /dev/oracle

Ostrzeżenie: (0%)
-----

To jest właśnie zwykłe czytanie pliku. A różni się tym, że tutaj w pamięci w każdym momencie działania skryptu masz jedynie dwukilobajtowy fragment pliku w pamięci, natomiast to, co nazywasz "normalnym" czytaniem, choć wcale nim nie jest, wczytuje wszystko za jednym zamachem.
  Forum: PHP · Podgląd postu: #864261 · Odpowiedzi: 8 · Wyświetleń: 1 170

Zyx
Napisane: 13.03.2011, 11:30:23





Grupa: Zarejestrowani
Postów: 952
Dołączył: 20.01.2007
Skąd: /dev/oracle

Ostrzeżenie: (0%)
-----

Czytać pliki po kawałku. Przecież w PHP jest cała masa funkcji, które pozwalają Ci wczytywać plik mniejszymi porcjami, np. po 2 KB, albo po jednej linijce. Wtedy taki plik, o ile będziesz regularnie kasować już wczytane i przetworzone dane, może mieć nawet i gigabajt.
  Forum: PHP · Podgląd postu: #845629 · Odpowiedzi: 8 · Wyświetleń: 1 170

Zyx
Napisane: 11.03.2011, 21:01:37





Grupa: Zarejestrowani
Postów: 952
Dołączył: 20.01.2007
Skąd: /dev/oracle

Ostrzeżenie: (0%)
-----

Wystarczy rzucić okiem na parę funkcji matematycznych dostępnych w PHP...

  1. echo pow($a - $b, 2) + pow($c - $d, 2);
  Forum: Przedszkole · Podgląd postu: #845249 · Odpowiedzi: 1 · Wyświetleń: 668

Zyx
Napisane: 2.03.2011, 22:41:51





Grupa: Zarejestrowani
Postów: 952
Dołączył: 20.01.2007
Skąd: /dev/oracle

Ostrzeżenie: (0%)
-----

Kiedyś, dawno temu myślałem nad przejściem na Bazaar dla niektórych moich projektów open-source. Odzew ludzki był zerowy. Prawdę mówiąc to nie pamiętam czy w ogóle widziałem kiedykolwiek projekt, którego główne repozytoria były postawione na Bazaarze. Gitowe repozytoria ma już pewnie co drugi projekt, Mercurial też się tu i ówdzie trafia, a ten?
  Forum: Kontrola i zarządzanie projektami · Podgląd postu: #842625 · Odpowiedzi: 6 · Wyświetleń: 3 002

Zyx
Napisane: 25.02.2011, 22:06:02





Grupa: Zarejestrowani
Postów: 952
Dołączył: 20.01.2007
Skąd: /dev/oracle

Ostrzeżenie: (0%)
-----

Tak, gałąź 2.x została przepisana całkowicie od nowa (m.in. po to, by wyeliminować tego typu idiotyzmy, z którymi teraz się męczysz) i nie jest kompatybilna ani pod kątem API, ani pod kątem języka szablonów.

Ogólnie kody instrukcji możesz znaleźć w pliku opt.instruction.php. Każda instrukcja ma własną klasę, gdzie obsługiwana jest kompilacja poszczególnych znaczników do kodu PHP. Klasa optSection jest gdzieś na początku tego pliku. To, co Ci jest najbardziej potrzebne, znajduje się w metodzie showAction(). Najważniejszy kod to te linijki:

  1. if(is_null($state))
  2. {
  3. $output .= ' if(is_array('.$link.') && ($__'.$name.'_cnt = sizeof('.$link.')) > 0){ ';
  4. }
  5. else
  6. {
  7. if($this -> tpl -> statePriority == OPT_PRIORITY_NORMAL)
  8. {
  9. $output .= ' if('.$state.' && is_array('.$link.') && ($__'.$name.'_cnt = sizeof('.$link.')) > 0){ ';
  10. }
  11. else
  12. {
  13. $output .= ' if('.$state.'){ if(is_array('.$link.') && ($__'.$name.'_cnt = sizeof('.$link.')) > 0){ ';
  14. }
  15. }


Jak widzisz, odpowiadają one za wygenerowanie kodu PHP sprawdzającego typ i zliczającego elementy tablicy. Musisz je zastąpić tak, aby akceptowały też obiekty implementujące odpowiednie interfejsy. Na wszelki wypadek radzę Ci też poprawić trochę linijek powyżej - nie wiem, czy korzystasz z sekcji dynamicznych, ale na wszelki wypadek popraw i je, gdyby ktoś miał to jeszcze rozwijać, by w Ciebie gromami nie rzucał smile.gif.

Po tym zabiegu musisz jeszcze skoczyć do sectionBegin() i poprawić tam jedną drobną rzecz:

  1. if($this->sections[$this->nesting]['order'] == 'reversed')
  2. {
  3. $this -> compiler -> out(' for($__'.$name.'_id = $__'.$name.'_cnt - 1; $__'.$name.'_id >= 0; $__'.$name.'_id--){ $__'.$name.'_val = &'.$this->sections[$this->nesting]['link'].'[$__'.$name.'_id]; ');
  4. }
  5. else
  6. {
  7. $this -> compiler -> out(' foreach('.$this->sections[$this->nesting]['link'].' as $__'.$name.'_id => &$__'.$name.'_val){ ');
  8. }


Jak widzisz, do wyświetlania sekcji w odwróconej kolejności wykorzystywana jest pętla for, zatem jeśli korzystasz z tego, dobrze by było implementować ArrayAccess. Z kolei dla porządku normalnego jest foreach, tylko tam przy generowaniu zmiennej wartości OPT wstawia brzydki znaczek referencji, który nie bardzo będzie chciał współpracować z Twoimi obiektami. Usuwasz go i problem załatwiony. Identyczny symbol masz też przy pętli for.

Generalnie jak chcesz sekcje odwrócone, możesz zastosować myk, który zaimplementowałem w formacie Objective do OPT 2.0. Tam najpierw jedziemy pętlą foreach po iteratorze i budujemy tablicę wartości. Następnie ją odwracamy i wprowadzamy do właściwej pętli. Może zbyt efektywne to nie jest, ale dla ogólnego przypadku jest to jedyna metoda. Ewentualnie, skoro już robisz konkretne obiekty, możesz tu zaimplementować to, co Ci najbardziej pasuje.
  Forum: Systemy szablonów · Podgląd postu: #840949 · Odpowiedzi: 5 · Wyświetleń: 3 757

Zyx
Napisane: 1.02.2011, 21:10:18





Grupa: Zarejestrowani
Postów: 952
Dołączył: 20.01.2007
Skąd: /dev/oracle

Ostrzeżenie: (0%)
-----

Dopóki nagłówki nie zostały wysłane, możesz je dowolnie zmieniać. Zakładam, że wiesz o tym, że wysłanie nawet pojedynczego bajtu normalnej treści uniemożliwia zmianę nagłówka. Zakładam też, że zrozumiałeś to, co napisałem poprzednio, że treść strony błędu musisz sam przygotować i wysłać razem z nagłówkiem.
  Forum: PHP · Podgląd postu: #832951 · Odpowiedzi: 4 · Wyświetleń: 999

Zyx
Napisane: 1.02.2011, 16:48:10





Grupa: Zarejestrowani
Postów: 952
Dołączył: 20.01.2007
Skąd: /dev/oracle

Ostrzeżenie: (0%)
-----

Po pierwsze, nie HTTP 1.0, a HTTP 1.1. Chyba nie zamierzasz obsługiwać przeglądarek z początku lat 90.

Sprawa ze stronami błędów wygląda w ten sposób, że nagłówek się jak najbardziej wysyła, ale przydałoby się jeszcze wysłać jakiś kod HTML z komunikatem "Błąd 404, coś tam nie istnieje". Tak, możliwe (a nawet zalecane) jest wtedy wysłanie własnego kodu HTML.
  Forum: PHP · Podgląd postu: #832875 · Odpowiedzi: 4 · Wyświetleń: 999

Zyx
Napisane: 27.01.2011, 16:21:18





Grupa: Zarejestrowani
Postów: 952
Dołączył: 20.01.2007
Skąd: /dev/oracle

Ostrzeżenie: (0%)
-----

O, widzę że kolejny fan komunikacji. Pozdrawiam ze względu na wspólne zainteresowania. Natomiast sama strona wygląda mocno poniżej średniej, zresztą jak wiele innych o tej tematyce. Koledzy zwrócili już uwagę na kompletnie nietrafioną kolorystykę i podpisuję się pod tym. Logo także bym wymienił - górna część strony wygląda na pierwszy rzut oka, jakbyś jakiś efekt rozmycia tam zastosował. Za dużo jest odwracających uwagę bzdetów, a w treści strony w ogóle nie ma oddzielonych bocznych pasków od treści.
  Forum: Oceny · Podgląd postu: #831287 · Odpowiedzi: 30 · Wyświetleń: 4 754

Zyx
Napisane: 3.01.2011, 20:35:43





Grupa: Zarejestrowani
Postów: 952
Dołączył: 20.01.2007
Skąd: /dev/oracle

Ostrzeżenie: (0%)
-----

O nie panie, to nie działa w tę stronę smile.gif. catch dopasowuje obiekty dokładnie tej samej klasy, lub klas bardziej wyspecjalizowanych. PDOException nie jest specjalizacją, a uogólnieniem PDOmyExc.
  Forum: Object-oriented programming · Podgląd postu: #823100 · Odpowiedzi: 1 · Wyświetleń: 1 013

Zyx
Napisane: 9.12.2010, 19:21:27





Grupa: Zarejestrowani
Postów: 952
Dołączył: 20.01.2007
Skąd: /dev/oracle

Ostrzeżenie: (0%)
-----

Kropka to operator łączenia ciągów tekstowych i stosujesz je wtedy, kiedy chcesz połączyć dwa ciągi tekstowe, a to możesz zrobić jedynie będąc aktualnie poza ciągiem tekstowym. Apostrof nie zamyka ciągu otwartego cudzysłowem i vice versa.
  Forum: PHP · Podgląd postu: #815273 · Odpowiedzi: 9 · Wyświetleń: 909

7 Stron V   1 2 3 > » 

New Posts  Nowe odpowiedzi
No New Posts  Brak nowych odpowiedzi
Hot topic  Popularny temat (Nowe)
No new  Popularny temat (Brak nowych)
Poll  Sonda (Nowe)
No new votes  Sonda (Brak nowych)
Closed  Zamknięty temat
Moved  Przeniesiony temat
 

RSS Wersja Lo-Fi Aktualny czas: 29.03.2024 - 08:01