bigzbig
Reputacja
1,293
Głosów ogółem

- 89

- 9
- Prawdziwe imię
- Zbigniew Heintze
- Członek od
- 2 lata, 4 miesiące
- Ostatnio widziany
- 1 rok, 2 miesiące temu
- Witryna
- http://blog.hei...
- Miejscowość
- Poznań
- Wiek
- 35
O mnie
Programista hobbista :)
Pytania: 7
-
2011-02-27 23:30:42
Konwencje kodowania
Jeśli znacie jakieś adresy w sieci traktujące o konwencjach kodowania, tzw. dobrych praktykach kodowania lub też macie d
-
2010-01-18 23:17:51
Najlepsze devblogi
Podzielcie się proszę linkami do najlepszych polskich i zagranicznych blogów traktujących o programowaniu. Napiszcie, kt
-
2010-01-27 14:47:12
Publikowanie projektu na serwerze produkcyjnym
Pliki projektu trzymamy w repozytorium svn, natomiast na serwerze produkcyjnym nie używamy svn i aktualizujemy pliki "rę
-
2010-02-04 13:50:09
Zła sława PHP
Generalnie PHP nie cieszy się dobrą opinią mimo, że jest jednym z najpopularniejszych języków wykorzystywanych do pisani
-
2010-02-01 16:18:47
Przyszłość języka GO [zamknięte]
Czy w Waszej ocenie google ma szansę spopularyzować język GO? Czy warto brać się za jego naukę i co sadzicie w ogóle o s
-
2010-02-05 15:01:44
Pluginy do WordPress-a
Jakie wtyczki do Wordpressa dydykowane dla ludzi piszących o programowaniu polecacie?
-
2010-06-27 16:03:27
Workbench dla Postgresql
Jakie możecie polecić narzędzia (darmowe i komercyjne) do zarządzania bazami danych postgres-a. Zależy mi na programie,
Odpowiedzi: 99
-
2010-01-31 20:15:10 Jak w skrypcie PHP pobrać ilość wybranych rekordów z tabeli bazy
Wydaje mi się, że poprzedzające moją wypowiedzi (za wyjątkiem anii) nie do końca są na temat.
Po wykonaniu zapytania SQL typu SELECT- jeśli używasz dodatku MySQL najlepiej jest użyć funkcji mysqlnumrows
<?php $result = mysql_query("SELECT * FROM table", $conn); $num_rows = mysql_num_rows($result); ?>Dla zapytań typu DELETE, INSERT, UPDATE z kolei należy skorzystać z funkcji mysqlaffectedrows
<?php mysql_query('DELETE FROM table'); $num_rows = mysql_affected_rows(); ?>W przypadku dodatku MySQL Improved Extension będą to odpowiednio właściwości: num_rows
<?php $stmt = $mysqli->prepare("SELECT * FROM table"); $stmt->execute(); $stmt->store_result(); $num_rows = $stmt->num_rows; $stmt->close(); ?>oraz affected_rows
<?php $stmt = $mysqli->prepare('DELETE FROM table'); $stmt->execute(); $num_rows = $stmt->affected_rows; $stmt->close(); ?>Z kolei korzystając z PDO wystarczy metoda rowCount
<?php $st = $db->prepare("SELECT * FROM table"); $st->execute(); $num_rows = $st->rowCount(); $del = $dbh->prepare('DELETE FROM table'); $del->execute(); $count = $del->rowCount(); ?> -
2010-03-03 15:28:01 PHP: klasa dla sesji?
Możesz używać tradycyjnych sesji tylko "zamknąć" je w obiekcie. Dopisać setery i getery, a także wzbogacić sesje o dodatkowe mechanizmy np. metode get_once, która pobierze wartość z sesji i natychmiast ją usunie. To właśnie możliwość wzbogacania o dodatkowe funkcjonalności przemawia przede wszystkim za tym aby tworzyć klasę do obsługi sesji.
Takie wrappery ma większość dostępnych frameworków dla PHP jak Kohana PHP czy Symfony. Przykładem jest np. Zend_Session. Oczywiście oprócz zwykłego opakowania można zaimplementować własny system sesji np. oparty o bazę danych. Wszystko zależy od potrzeb.
-
2010-03-04 12:53:38 Funkcja w funkcji. [zamknięte]
Funkcje możesz tworzyć w dowolnym miejscu ale nie zawsze masz do niej dostęp z zewnątrz.
Sposób pokazany przez ~piotreks to tworzenie prototypu metodą konstruktora
var Foo = function() { this.someMethod = function() { alert('Some method'); } }Wywołując
obj = new Foo();powołujesz do życia instancje prototypu Foo. Możesz następnie wywołać metodęobj.someMethod();lub też tak jak to zrobił ~potreks z pominięciem przypisania obiektu do zmiennej new Foo().someMethod(); Tak czy inaczej zawsze w takim przypadku trzeba utworzyć obiekt. Przy okazji niejako dodam, że w przypadku powoływania wielu obiektów danego prototypu zalecany jest sposób definiowania metod z użyciem prototype (nie mylić z frameworkiem prototype).var Foo = function() { }; Foo.prototype.someMethod = function() { alert('Some method'); }Różnica polega na tym, że w pierwszym przypadku przy powoływaniu do życia nowej instancji za każdym razem metoda someMethod tworzona jest na nowo, a w drugim przypadku jest to cały czas jedna i ta sama metoda.
Z kolei zdefiniowanie metody w sposób:
var Foo = function() { }; Foo.someMethod = function() { alert('Some method'); }Daje możliwość wywołania metody prototypu bez tworzenia obiektu Foo
Foo.someMethod();- to taki jakby odpowiednik metod statycznych w PHP.Jak już jesteśmy przy obiektach w JS bardzo popularnym sposobem jest tworzenie obiektu ad hock w następujacy sposób
var Foo = { someMethod: function () { alert('Some method'); } }W tym wypadku Foo nie jest prototypem tylko instancja prototypu Object dlatego oczywistym jest wywołanie
Foo.someMethod();. -
2010-01-16 21:20:44 Testujemy strone pod IE
Niestety IE Tester niekiedy nie renderuje strony tak samo jak "właściwa" przeglądarka. Różnice są w niuansach ale w przypadku webdeveloperki to pojedyncze piksele często stanowią źródło sporu. Dlatego też w firmie, w której pracuję stosujemy wirtualki z zainstalowanymi windowsami i przeglądarkami - osobnymi dla każdej wersji IE. Począwszy od wersji 6. Inne rozwiązania jak na razie się nie sprawdziły. Microsoft przygotował nawet swego czasu specjalne wersje Windowsa XP dla webdeveloperów.
-
2010-01-16 21:35:16 Materiały dot. JavaScript
Jedna z najlepszych książek na ten temat "JavaScript dla webmasterów. Zaawansowane programowanie" jakie czytałem. Dziś już się pewnie nie przyda bo ludzie powoli przestają pisać w czystym JS na rzecz frameworków jquery, prototype, mootools, yui itp. Gdybyś jednak chciał napisać swój framework javascriptowy to ta lektura będzie dla Ciebie niezbędna.
-
2010-01-23 00:29:22 Konwencje kodowania
Dla programistów PHP z pewnością przydatne będą opisy konwencji stosowanych w PEAR a także w Zend_Framework. Są one w dużej mierze zbieżne i można śmiało przyjąć, że wytyczają standardy. Z praktycznego punktu widzenia nie do końca odpowiada mi sposób nazywania plików. Pracując np. nad newsami zdarza się, że edytuję na przemiennie kontroler i model i wtedy w edytorze na zakładkach pojawiają mi się dwa pliki o nazwie News.php. Kiedy takich plików jest więcej robi się to niewygodne.
Dla CSS-a z kolei rozsądne przydają się reguły opisane w artykule CSS Coding Conventions.
Edit: Aha zapomniałem jeszcze o tym: Structural Naming Convention in CSS. Dobre rady a propos dobierania nazw uniwersalnych.
-
2010-02-03 08:54:33 Ładny kod bez warunków
Duża ilość zagnieżdżeń przede wszystkim zmniejsza czytelność kodu, ale nie jest też bez wpływu na wydajność dlatego zalecane jest takie konstruowanie warunków aby liczba zagnieżdżeń była jak najmniejsza. Oczywiście podstawową radą jest łączenie warunków przy pomocy AND i OR, ale mamy też inne sposoby na zmniejszenie liczby zagnieżdżeń.
Dobrą metodą jest trzymanie się zasady jak najszybszej ucieczki z funkcji przy pomocy returna.
zamiast
<?php function foo($a) { if ($a == 1) { // do something } else { retun false; } } ?>lepiej napisać
<?php function foo($a) { if ($a != 1) { return false; } // do something } ?>Można tę zasadę konstruowania negatywnych warunków dodatkowo połączyć z użyciem pętli do .. while (lub od wersji PHP 5.3 konstrukcji goto) w celu ominięcia zbędnych warunków.
zamiast
<?php function foo($a) { if ($a == 1) { $a = $a + 1; if ($a < 3) { $a = 2 * $a; if ($a < 10) { // do something } else { return $a; } } else { return $a; } } else { return $a; } } ?>lepiej napisać
<?php function foo($a) { do { if ($a != 1) break; $a = $a + 1; if ($a >= 3) break; $a = 2 * $a; if ($a >= 10) break; // do something } while(0); return $a; } ?> -
2010-02-08 21:00:46 .htaccess, błąd 404 i skrypty PHP
Proponuję zrobić to tak: Wszytko co nie jest istniejącym plikiem lub katalogiem kierować za pomocą .htaccess na index.php
RewriteCond $1 !^(index\.php) RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php/$1 [L]I już w php obsłużyć żądanie. Jeśli podany adres jest błędny - czytaj nie wskazuje właściwego zasobu to należy zwrócić stosowny komunikat poprzedzony nagłówkiem 404
<?php header("HTTP/1.0 404 Not Found"); echo 'Podana strona '.$_SERVER['REQUEST_URI'].' nie istnieje.'; die; ?> -
2010-02-10 15:01:49 PHP - explode po kilku znakach
A ja polecam zapoznać się z funkcją preg_split oraz formularzem do testowania wyrażeń regularnych.
Edit: preg_split('/\s,\s/i', $text);
-
2010-02-11 12:03:31 Dostęp do bazy danych
Są tacy co preferują ORM-y i chętnie stosują ActiveRecord, ja natomiast wybrałem DAO.
ORM-y są dla mnie niepotrzebną nadbudową zmuszającą do uczenia się innej filozofii budowania zapytań gdy tymczasem na dłuższą metę i tak nie obędzie się bez znajomości SQL-a. Paradoksalnie dla prostych aplikacji ORM jest zbyt ciężki i skomplikowany, a dla rozbudowanych, wymagających efektywności aplikacji wprowadza zbyt wiele ograniczeń i praktycznie uniemożliwia optymalizację. Propel czy Doctrine mają już w tej chwili ogromne mnożliwości, ale i tak przy jakichkolwiek problemach programista jest zmuszony najpierw do skonstruowania zapytania SQL po to tylko aby potem próbować przetłumaczyć to na dialekt ORM-a.
ActiveRecord z kolei nadaje się właściwie tylko do prostych operacji na pojedynczym rekordzie.
DAO w moim wydaniu to po prostu najczęściej Klasa agregująca metody wykonujące zapytania SQL-owe dotyczące jakiejś logicznej części aplikacji np. newsów. Jeśli źródłem danych nie jest baza tylko np. SOAP to w DAO znajdą się metody pobierające dane via SOAP. Oczywiście w samej klasie DAO używam PDO a w praktyce jakiegoś "składacza zapytań" ułatwiającego konstruowanie zapytań SQL-owych (nie mylić z ORM-em). Tak dla jasności nie utożsamiam pojęcia modelu z relacją (tabelą) w bazie danych gdyż najprostsze operacji typu INSERT, UPDATE, DELETE najczęściej i tak wymagają działania na więcej niż jednej tabeli.














7
2
