Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

29 Stron V   1 2 3 > » 

thek
Napisane: 5.09.2015, 20:01:21





Grupa: Moderatorzy
Postów: 4 362
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D



@hub ale tylko do pewnego poziomu. Jeśli masz stronę przesyconą słowami kluczowymi to SEO nie działa jak trzeba. Słowa kluczowe w tym momencie zaczynają tracić swą moc i zostają przez automat uznane za zwykłe. Popatrz na to jak na przesłodzenie lub przesolenie pokarmu. Do pewnego poziomu dodawanie soli i cukru jest ok, ale jeśli przesadzisz, to potrawa staje się niejadalna.
  Forum: Optymalizacja i pozycjonowanie stron - SEO · Podgląd postu: #1170309 · Odpowiedzi: 8 · Wyświetleń: 2 761

thek
Napisane: 3.09.2015, 21:52:52





Grupa: Moderatorzy
Postów: 4 362
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D



Sam dałeś Assert na encji to Ci sprawdza przy każdym submicie, bo niby jak masz rozpoznać obecnie co podczas walidacji ma być sprawdzane, a co nie? Od tego są validation_groups by decydować co i kiedy powinno być walidowane.
  Forum: Frameworki · Podgląd postu: #1170153 · Odpowiedzi: 1 · Wyświetleń: 303

thek
Napisane: 30.08.2015, 20:48:25





Grupa: Moderatorzy
Postów: 4 362
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D



MariaDB to fork MySQL. Po prostu stwierdzono, że Oracle opieprza się w rozwoju tego silnika, a do tego wypuszcza go mocno zbugowanego. W efekcie niektórzy zaczęli sprawdzać kod kolejnych wydań MySQL i nakładali na niego poprawki bezpieczeństwa oraz wydajnościowe. Tak powstał MariaDB w dość mocnym skrócie.
  Forum: Bazy danych · Podgląd postu: #1169816 · Odpowiedzi: 6 · Wyświetleń: 784

thek
Napisane: 27.08.2015, 23:54:01





Grupa: Moderatorzy
Postów: 4 362
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D



To Ci chyba zostaje zabawa z Collection. Coś na wzór tego -> http://symfony.com/doc/current/cookbook/fo...ollections.html aczkolwiek nie do końca wiem czy faktycznie na podobnym mechanizmie Ci zależy.
  Forum: Frameworki · Podgląd postu: #1169620 · Odpowiedzi: 2 · Wyświetleń: 575

thek
Napisane: 7.08.2015, 22:11:50





Grupa: Moderatorzy
Postów: 4 362
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D



Ja podobnie jak poprzednicy polecam rozpocząć od tzw microframeworków. Wiele z nich to okrojone wersje większych braci i można w razie potzeby używać dodatków/pluginów/bundli stosowanych w tych większych. W efekcie przesiadając się na większe, możesz już znać część rozwiązań.
  Forum: Przedszkole · Podgląd postu: #1167659 · Odpowiedzi: 18 · Wyświetleń: 1 369

thek
Napisane: 23.07.2015, 09:45:00





Grupa: Moderatorzy
Postów: 4 362
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D



W takim wypadku chyba nadal nie widzisz gdzie jest Twoja tablica z obiektami. Chyba zrobię to co poprzednio i Ci to rozpiszę smile.gif
Kod
$items = array(5) {
   ["itemsCount"]=> int(501) <- element tablicy zawierający liczbę przedmiotów
   ["itemsFeaturedCount"]=> int(0)  <- element tablicy zawierający liczbę przedmiotów wyszczególnionych
   ["itemsList"]=> object(stdClass)#3 (1) { element tablicy typu object zawierający listę wszystkich informacji związanych z przedmiotami
      ["item"]=> array(100) { <- atrybut obiektu  będący tablicą przedmiotów
         [0]=> object(stdClass)#4 (14) { element tablicy typu object będący konkretnym przedmiotem
            ["itemId"]=> int(5118545340) <- atrybut przedmiotu
(...)
  Forum: PHP · Podgląd postu: #1165920 · Odpowiedzi: 12 · Wyświetleń: 2 437

thek
Napisane: 23.07.2015, 08:18:54





Grupa: Moderatorzy
Postów: 4 362
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D



Przyjrzyj się strukturze zwrotnej z serwisu i dopasuj do tego pętlę smile.gif var_dump Ci jasno pokazuje ją, a PHP także daje wskazówkę, że coś nie tak jest z indeksem. Może po prostu iterujesz nie po tym co trzeba? wink.gif Jeśli nadal nie kumasz to rozpiszę Ci to nieco według tego co pokazuje var_dump jaki dałeś:
Kod
$items = array(5) {
   ["itemsCount"]=> int(501) <- element tablicy typu int
   ["itemsFeaturedCount"]=> int(0)  <- element tablicy typu int
   ["itemsList"]=> object(stdClass)#3 (1) { element tablicy typu object
      ["item"]=> array(100) { <- atrybut obiektu typu array
         [0]=> object(stdClass)#4 (14) { element tablicy typu object
            ["itemId"]=> int(5118545340) <- atrybut obiektu typu int
(...)

Widzisz dlaczego $items[0] zawoła błędem? Oraz dlaczego $items[0]['itemsList']['itemId'] także się wysypie? Wcale nie patrzysz na dane zwracane, ich strukturę i typy oraz z bardzo radosną twórczością podchodzisz do nich wink.gif Popatrz na to jak ja rozpisałem co jest czym i wyciągnij wnioski kiedy używać [], kiedy -> a kiedy użyć pętli...

EDIT: I uważaj na zawartość "itemsList" oraz "item", bo "itemsCount" sugeruje istnienie 501 przedmiotów, ale już "item" wskazuje 100, a reszty var_dump brak, więc ciężko wyrokować o dalszej strukturze całości i jak obie wartości współgrają ze sobą. Myślę, że ta mała uwaga naprowadzi Cię na to, gdzie byka w logice robisz.
  Forum: PHP · Podgląd postu: #1165903 · Odpowiedzi: 12 · Wyświetleń: 2 437

thek
Napisane: 19.07.2015, 21:58:46





Grupa: Moderatorzy
Postów: 4 362
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D



Basecamp ma darmową alternatywę - FreedCamp wink.gif

EDIT: w sumie wyszukiwarka po wpisaniu: "redmine alternatives" też dużo wyników rzuca smile.gif Ja ogólnie najwięcej pracuję z JIRA, ale to jednak komercyjne rozwiązanie
  Forum: Kontrola i zarządzanie projektami · Podgląd postu: #1165542 · Odpowiedzi: 19 · Wyświetleń: 9 558

thek
Napisane: 24.02.2015, 10:56:03





Grupa: Moderatorzy
Postów: 4 362
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D



Są pewne projekty, które to umożliwiają w różnym stopniu, ale pamiętaj, że taki program to nie tylko php, ale także baza w Twoim wypadku. A do tego też jakiś serwer bazodanowy w tle byś mieć musiał. Myślę, że fraza jakiej szukasz w google będzie brzmiała: php standalone smile.gif Co do bazy danych zamiast kombinować chyba lepiej pomyśleć o użyciu sqlite zamiast mysql. Mniej zabawy. Oczywiście to tylko moja opinia i może ktoś inny też zarzuci pomysł.
  Forum: Przedszkole · Podgląd postu: #1146848 · Odpowiedzi: 4 · Wyświetleń: 289

thek
Napisane: 3.02.2015, 14:27:57





Grupa: Moderatorzy
Postów: 4 362
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D



Sama błąd Ci mówi: Brak zdefiniowanej zmiennej $link_zdj bo gdzie ona jest? Z powietrza się nie bierze? Chyba Ci chodzi o $row['link_zdj'], a to nie to samo i PHP nie zgadnie, że o to Ci chodzi smile.gif
  Forum: Przedszkole · Podgląd postu: #1143444 · Odpowiedzi: 3 · Wyświetleń: 829

thek
Napisane: 22.07.2014, 13:09:16





Grupa: Moderatorzy
Postów: 4 362
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D



Możesz próbować wewnątrz zagłębionego triggerować wykonanie innego eventu. Skoro to jquery to:
[JAVASCRIPT] pobierz, plaintext
  1. jQuery('thead').on('click', 'th:not(:first-child)', function(e) {
  2. jQuery('body').trigger('click');
  3. // dalej co chcesz...
  4. // ...
  5. // ... ale nie zapomnij o zatrzymaniu propagacji
  6. // bo Ci się inne eventy odpalą
  7. e.stopPropagation();
  8. // lub jeszcze lepiej
  9. e.stopImmediatePropagation();
  10. // jesli masz wiele innych zdarzeń na tym elemencie i nie mają się one odpalić poza tym jednym
  11. });
[JAVASCRIPT] pobierz, plaintext
  Forum: JavaScript · Podgląd postu: #1116479 · Odpowiedzi: 3 · Wyświetleń: 556

thek
Napisane: 18.09.2013, 23:23:47





Grupa: Moderatorzy
Postów: 4 362
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D



click, odczyt zawartości textarea, przechwycenie linków, otwarcie wszystkiego w nowych oknach
Co do ostatniego... window.open(url, target); gdzie target to oczywiście oznaczenie nowego okna. A jaki to parametr to sam chyba wiesz smile.gif
  Forum: Przedszkole · Podgląd postu: #1066087 · Odpowiedzi: 3 · Wyświetleń: 350

thek
Napisane: 18.09.2013, 22:26:57





Grupa: Moderatorzy
Postów: 4 362
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D



@Terrorizer: Już wielce widzę te super wymowne galerie. Jeden obraz wyraża więcej niż tysiące słów... Taaaa... Tyle, że nie zawsze to, co autor nieraz chce powiedzieć lub co jest sednem tej grafiki. Poza tym każda grafika/zdjęcie zazwyczaj samym tytułem nie stoi smile.gif Jest jeszcze opis, komentarze. Gdyby wszystko było opatrzone identycznej wagi komentarzami to wszystkie elementy były by jednakowej wartości. Tytuł i opis autora jednakowej wagi co byle komentarz.

Tytuł strony? Metatagi?? LOL... Popatrz tam na pierwszej lepszej stronie osób, które nie rozumieją pozycjonowania, a zobaczysz tam takie spamowisko bez ładu i składu, że głowa boli. Dlatego google zwraca uwagę na gęstość słów kluczowych. Przesadzasz? Olewa takie, albo wręcz filtr na nie dostajesz biggrin.gif Inni walą tam nawet słowa kluczowe, których nawet w treści strony brak. To ja się pytam: "Po co?"

Paragraf to jedynie akapit. Nagłówki pełnią rolę tytułów czy śródtytułów w tekście. Służą więc logicznemu podziałowi tekstu na mniejsze i większe partie tekstu. Roboty mogą analizować stronę, ale jej nie widzą. Tym samym Twoje "cuda" CSS-owe czy skryptowe są nieraz dla nich niewidzialne i niezrozumiałe. Bot wchodzi na ułamek sekundy. Nie zobaczy czegoś, co odpala się po 5 sekundach skryptem smile.gif On bazuje w dużej mierze na semantyce kodu i tym co zdąży przetrawić. Nie będzie przecież całego CSS interpretował i zastanawiał się, czy ten "font-weight: bold" to coś ważnego, czy nie. A może <strong> jest ważniejszy albo text-decoration: underline? Albo sięgniemy po font-size? Zaczynasz łapać? Nagłówki możemy wystylizować, ale ich numeracja sugeruje ważność. Oraz podział strony na segmenty. Stanowią punkt zaczepienia dla oka. Jak również szkielet, który wypełniamy treścią. Pełnią więc nagłówki wiele funkcji, a ich porzucenie zdecydowanie nie ma sensu.

@zoorg: źle zrozumiałeś słowa lobopola. To, że lepiej czytają, oznacza tyle, iż ignorują sztuczki, które stosują SEOwcy w formie ukrytej. Widzisz metatagi? Nie. Reagujesz alergią na title zasrany słowami kluczowymi? Zapewne tak. Widzisz tekst ukryty pod display:none lub w kolorze tła? Pewnie nie smile.gif Właśnie o coś takie chodziło lobopolowi. O modyfikacjach stylami, które sprawiają, że tak naprawdę boty wywalają syf i skupiają na treści oraz wyróżnikach w nim. Stosowanie tego samego wszędzie i jedynie stylowanie sprawia, iż elementy stają się mało wyraziste. Poza tym zaczynasz zasypywać stronę masą elementów zbędnych i ilość znaków odpowiedzialnych za stylizację zaczyna być w kiepskim stosunku do tekstu istotnego. Bo też zaczynają się mnożyć atrybuty id, class, wszelkiego rodzaju spany, elementy puste. A to jest objaw kiepskiej wiedzy autora z zakresu stosowania html+css.
  Forum: Przedszkole · Podgląd postu: #1066071 · Odpowiedzi: 15 · Wyświetleń: 1 482

thek
Napisane: 4.09.2013, 20:57:41





Grupa: Moderatorzy
Postów: 4 362
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D



Zauważ, że może być tylko 0 lub 1... A więc wystarczy, że jest tylko jedno 0. Tym samym warunek spełnia wszystko co nie ma we wszystkich kolumnach 1, ale 1 musi wystąpić choć raz. Najbardziej ogólny przypadek więc to: suma wartości w interesujących nas kolumnach jest mniejsza niż liczba kolumn, ale jednosześnie choć jedna ma 1. Tu mamy 3 kolumny... a więc
  1. WHERE a+b+c BETWEEN 1 AND 2

W przypadku większej ilości odpowiednio:
  1. WHERE a+...+n BETWEEN 1 AND liczba_kolumn_brana_pod_uwagę-1
  Forum: MySQL · Podgląd postu: #1063803 · Odpowiedzi: 5 · Wyświetleń: 455

thek
Napisane: 3.09.2013, 10:04:35





Grupa: Moderatorzy
Postów: 4 362
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D



Jak już wspomniał Crozin, model to nie tylko pobieranie czy zwracanie danych ze źródła jakiegoś (w końcu nie tylko baza jest nim). Model odpowiada także choćby za obróbkę danych. czy ich przekształcanie. Stąd choćby w Symfony i innych frameworkach klasy repozytoriów powiązane są z klasami encji i tym samym z warstwą modelu. Choć faktycznie granica w części przypadków jest płynna i w niektórych przypadkach (przykładowo microframeworkach) granica ta się lekko zaciera na rzecz zwięzłości (definicja routes wprost w głównym pliku aplikacji - zaznaczam, że pomijam tu ControllerProvidery dla uproszczenia).
  Forum: Przedszkole · Podgląd postu: #1063523 · Odpowiedzi: 3 · Wyświetleń: 367

thek
Napisane: 9.07.2013, 08:23:27





Grupa: Moderatorzy
Postów: 4 362
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D



Chyba chodziło o jakiś próg liczby napisanych postów. Nie dam sobie głowy uciąć, ale chyba 50 lub 100.
  Forum: Forum · Podgląd postu: #1054875 · Odpowiedzi: 6 · Wyświetleń: 5 272

thek
Napisane: 9.05.2013, 10:07:47





Grupa: Moderatorzy
Postów: 4 362
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D



Gotowca nie znam, ale jeśli to miało by być tylko pod postacią kodu, to nie jest to wcale żaden problem.
1. Bierzesz tekst ukrywany.
2. Wyszukujesz wszystkie jego unikalne znaki
3. Rozbijasz tekst bazowy na litery i sprawdzasz czy występują wśród unikalnych tekstu ukrywanego.
4. Zwracasz indeksy trafień.

Punkt 3 można rozwiązać na wieeeeele sposobów. Przykładowo? Z użyciem: str_split i array_intersect i potem robisz co tam chcesz z tymi informacjami.
  Forum: Szukam · Podgląd postu: #1043865 · Odpowiedzi: 1 · Wyświetleń: 440

thek
Napisane: 5.05.2013, 22:17:57





Grupa: Moderatorzy
Postów: 4 362
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D



Po pierwsze analiza problemu, oszacowanie zadań oraz czasu na to przeznaczonego, oczywiście z naddatkiem na ewentualny poślizg lub ewentualne zmiany ze strony klienta. Z doświadczenia nie warto zakładać więcej niż kilka godzin na dobę, gdzie faktycznie praca daje efekt. Niby możesz klepać kod na okrągło, ale nie sądzę by wydajnie i w pełni udało Cisię więcej niż 5-6 godzin uzyskać. Zawsze stracisz czas na przełączanie się między zadaniami, odejścia od moitora by coś przekąsić, odpocząć od kodu. Po jakimś czasie pracy stwierdzam też, że tylko metodyki zwinne. Pisanie kodu 2-3 miesiące, by potem przez tydzień czy dwa czekać na feedback, nieraz w ogromnych ilościach pierdółek, to nie jest dla mnie idealne rozwiązanie. Lepiej mieć wsparcie klienta i testerów na bieżąco. Do tego więc jakiś issue tracker by mieć oko na to co poprawiać lub ogólnie jakąś tablicę, wspólną z zadaniami, gdzie ewentualnie wrzucane będą znalezione przez klienta błędy. Lepiej to zrobi Tobie pod kątem organizacji pracy (wiesz gdzie jesteś, co masz zrobić), jak i klienta, który widzi postępy, przez co nie truje Ci. No i wie, że też coś robi, ma wpływ na swój projekt smile.gif

Oczywiście dobrze mieć jakieś narzędzia do wykonywania automatyzacji zadań pokroju buildy, testy jednostkowe, testy regresji. Jednym słowem Continuous Integration w praktyce, czyli Hudson lub podobne narzędzie. Zapominasz, że coś takiego jest, Ty piszesz kod, reszta dzieje się w tle. Sprawdzasz raz na jakiś czas jak wyniki. Dobrze byłoby mieć także na oku potencjalne wąskie gardła, co możemy uzyskać narzędziami pokroju Sonar, które między innymi analizują kod, wyszukując instrukcji niebezpiecznych wydajnościowo (zbytnia złożoność) czy niezgodnych z założeniami początkowymi (choćby standardy kodowania). O bezpieczeństwie kodu poprzez repozytoria kodu chyba nie muszę wspominać?
  Forum: Hydepark · Podgląd postu: #1043162 · Odpowiedzi: 17 · Wyświetleń: 842

thek
Napisane: 30.04.2013, 20:19:18





Grupa: Moderatorzy
Postów: 4 362
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D



Jeśli windows -> http://doc.koolphp.net/Controls/KoolUpload...gress/index.php
Jeśli ubuntu -> http://ubuntuforums.org/showthread.php?t=1163903
  Forum: Serwery WWW · Podgląd postu: #1042339 · Odpowiedzi: 1 · Wyświetleń: 414

thek
Napisane: 10.04.2013, 21:30:15





Grupa: Moderatorzy
Postów: 4 362
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D



https://github.com/symfony/symfony/pull/3378 <- to Cię zainteresuje wink.gif
  Forum: Frameworki · Podgląd postu: #1038405 · Odpowiedzi: 3 · Wyświetleń: 380

thek
Napisane: 8.04.2013, 20:58:54





Grupa: Moderatorzy
Postów: 4 362
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D



Zastosuj inne ikony markerów smile.gif
  Forum: Po stronie przeglądarki · Podgląd postu: #1037881 · Odpowiedzi: 2 · Wyświetleń: 563

thek
Napisane: 8.04.2013, 21:07:24





Grupa: Moderatorzy
Postów: 4 362
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D



No jak to co? Obiekt klasy Człowiek jest w relacji z obiektem klasy Samochód. Tym samym wiesz, że istnieje pomiędzy nimi relacja, w której klasa Człowiek ma metodę getSamochody(), zwracającą tablicę obiektów klasy Samochód. I w sumie tyle. Teraz więc do widoku przekazujesz tablicę obiektów klasy Człowiek i po kolei lecisz.
  Forum: PHP · Podgląd postu: #1037882 · Odpowiedzi: 20 · Wyświetleń: 979

thek
Napisane: 29.03.2013, 12:13:06





Grupa: Moderatorzy
Postów: 4 362
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D



Same duże porcje to nie problem - prawda. Gorzej gdy na tych porcjach trzeba operować. Wyszukiwarka w tekście to zazwyczaj masakrator wydajności. Stąd od razu rzuciłem Sphinxem jako przykładem. Ogólnie wiadomo nieco bardziej zaawansowanym programistom, że w takich wypadkach najlepiej właśnie z tego typu silników skorzystać, by dla zwiększenia wydajności skorzystać z funkcjonalności shardingu oraz replikacji. Oba mają wpływ na wydajnośc oraz bezpieczeństwo, gdyż można dane porozmieszczać w różnych maszynach fizycznych. Więc nawet pad którejś z nich oznacza dostęp do pełnego kompletu danych. Rzucę więc słowami kluczowymi: Solr, Lucene, Sphinx, ElasticSearch. Uwierz, że gdy baza bardzo mocno się rozrośnie, na któryś z nich zapewne spojrzysz czułym wzrokiem wink.gif Wyobrażasz sobie przypuśćmy to forum bez takowego silnika pod spodem? Niby mało tekstu się wydaje, ale tu już jest z tego co kojarzę ponad milion postów. Goły MySQL z jego full-text-searchem by zdechł dawno. Niby można próbować się bronić horyzontalnym partycjonowaniem tabel w MySQL, ale to też tylko pewne obejście problemu, a nie jego całkowite rozwiązanie.
  Forum: PHP · Podgląd postu: #1035681 · Odpowiedzi: 9 · Wyświetleń: 663

thek
Napisane: 26.03.2013, 22:30:36





Grupa: Moderatorzy
Postów: 4 362
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D



To co zaproponowałem to jedynie wyrzucene IF-ELSEIFa na rzecz prostej operacji arytmetycznej. Jak już wspomniano, całość i tak musi być wpierw po stronie PHP utworzona. Pawel_W dobrze tu podsumował całość. To jest dokładnie to samo, ale zapisane po prostu zwięźlej.
  Forum: Przedszkole · Podgląd postu: #1035108 · Odpowiedzi: 10 · Wyświetleń: 356

thek
Napisane: 25.03.2013, 22:45:08





Grupa: Moderatorzy
Postów: 4 362
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D



Pytanie... Po kiego grzyba Ci tyle IFów, które w zależności od danych mogą prowadzić do nieoczekiwanych wyników? Zwróć uwagę na zależności! Mając określone dane możesz wyliczyć tylko określone inne. Sprowadź więc całość do pewnych zależności, sprawdzając co występuje a co nie i zagnieżdżając owe IFy zamiast wypuszczać obok siebie. Zauważ, że Twój kod wielokrotnie liczy to samo, a na dodatek nie sprawdzasz co się dzieje gdy ktoś wprowadzi dane w celu wywalenia całości wink.gif Jak? Załóżmy, że ktoś poda $u, $i, $g, to $r będzie kilka razy obliczane (linie 3, 15, 24, 31). A co gdy poda wszystkie 4? biggrin.gif Zacznij od najmniej zależnych, czyli $g oraz $r.
  1. function leitwert($u, $i, $r, $g) {
  2. if ($r) {
  3. $g1 = 1 / $r;
  4. if ($g && $g != $g1) {
  5. throw Exception('G is malformed!');
  6. } else {
  7. $g = $g1;
  8. }
  9. } elseif ($g) {
  10. $r1 = 1 / $g;
  11. if ($r && $r != $r1) {
  12. throw Exception('R is malformed!');
  13. } else {
  14. $r = $r1;
  15. }
  16. }
  17. if ($i) {
  18. if ($u) {
  19. $r1 = $i / $u;
  20. if ($r && $r != $r1) {
  21. throw Exception('R is malformed!');
  22. } else {
  23. $r = $r1;
  24. }
  25. } elseif ($r) {
  26. $u1 = $i / $r;
  27. if ($u && $u != $u1) {
  28. throw Exception('U is malformed!');
  29. } else {
  30. $u = $u1;
  31. }
  32. }
  33. } elseif ($u) {
  34. if ($i) {
  35. $r1 = $i / $u;
  36. if ($r && $r != $r1) {
  37. throw Exception('R is malformed!');
  38. } else {
  39. $r = $r1;
  40. }
  41. } elseif ($r) {
  42. $i1 = $u * $r;
  43. if ($i && $i != $i1) {
  44. throw Exception('I is malformed!');
  45. } else {
  46. $i = $i1;
  47. }
  48. }
  49. } elseif ($r) {
  50. if ($i) {
  51. $u1 = $i / $r;
  52. if ($u && $u != $u1) {
  53. throw Exception('U is malformed!');
  54. } else {
  55. $u = $u1;
  56. }
  57. } elseif ($u) {
  58. $i1 = $u * $r;
  59. if ($i && $i != $i1) {
  60. throw Exception('I is malformed!');
  61. } else {
  62. $i = $i1;
  63. }
  64. }
  65. }
  66. if (!$g) {
  67. $g = 1 / $r;
  68. }
  69. if ($i && $u && $r && $g) {
  70. return array('i' => $i, 'u' => $u, 'r' => $r, 'g' => $g);
  71. } else {
  72. throw Exception('Not enough data!');
  73. }
  74. }

Czemu tak? Zaczniemy od sprawdzenia czy $g albo $r były podane. Liczenie ma sens w przypadku gdy tylko jedna z nich istnieje. Jeśli są obie lub brak obu - jest to bezcelowe smile.gif A co gdy ktoś poda obie z powietrza? Przykładowo $r = 10, $g = 50... Skrypt powinien od razu zaprotestować. Na tym etapie może się też okazać, że wciąż nie mamy potrzebnego nam do dalszych obliczeń $r. Może tak być w sytuacji, gdy nie ma ani $r, ani $g potrzebnego do prostego jego wyliczenia.

Teraz "trójkącik" wink.gif Klasyczny $i = $u * $r, gdzie jedna jest zależna od dwóch pozostałych. Tu można prościutko polecieć zagnieżdżeniem. Sprawdzamy która z trzech wartości występuje i jeśli któraś jest, sprawdzamy czy są pozostałe. Jeśli jakiejś brak - obliczamy brakującą.

Na końcu może się okazać, że skończyliśmy tylko z $u, $i, $r dla wariantu gdy podano do funkcji $u oraz $i, więc w tym wypadku trzeba obliczyć brakujące $g;

I to by było prawie tyle... Ale gdyby ktoś podał tylko jeden parametr do funkcji? Zadanie byłoby niepoliczalne, gdyż za mało danych do policzenia wszystkich. Stąd ostatnie sprawdzenie czy wszystkie dane są niezerowe, które może rzucić wyjątek.

Wydaje się o wiele dłuższe? Pozornie. Ty masz zachodzące po kolei 9 ifów, które zawsze się wykonają, niezależnie co byś nie robił. Jak zwróciłem uwagę, niektóre wielokrotnie mogą liczyć to samo. Ja sprawdzam, które obliczenia są faktycznie niezbędne i tylko je wykonuję. Ograniczam się jedynie do niezbędnych, czyli brakujących obliczeń. Co istotne... Nie poprawiam błędów użytkownika. Jeśli wpisze głupoty w stylu: $i = 5, $u = 10, $r = 300, to Twój kod poleci i wypluje dane pozornie prawidłowe... Wiesz dlaczego? Właśnie dlatego, że się nadpisują. Ty tego nie rozumiesz, ale kod skopiowałeś skądś, gdzie taka kolejność została celowo zastosowana. Dane błędne są bowiem nadpisywane prawidłowymi. Problem z tym, że jest to bez Twojej wiedzy i nie masz kontroli nad tym, co ciąg obliczeń uzna za dane prawidłowe. Zależy to bowiem od tego, który IF wykona się pierwszy i nadpisze jaką wartość. Ja w takiej sytuacji sprawdzam, czy ewentualna wyliczona jest zgodna z podaną w parametrze. Jeśli coś jest nie tak - rzucam wyjątek zamiast liczyć głupoty.

I pamiętaj, że PHP zaokrągla! Do tego więc co mam najlepiej podejść z uwzględnieniem tego. Poczytaj o błędach zaokrągleń i jak ich uniknąć wink.gif Kod myślę, że kumaci zrozumieją i nieco poprawią by działał mimo owych problemów smile.gif
  Forum: PHP · Podgląd postu: #1034908 · Odpowiedzi: 5 · Wyświetleń: 451

29 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: 28.03.2024 - 10:42