FPP BOARD (http://board.fpp.pl//index.php)
- (http://board.fpp.pl//forumdisplay.php?forumid=8)
-- (http://board.fpp.pl//showthread.php?threadid=14775)
potrzebna pomoc z PHP
JeloneK, piszesz tu jeszcze? Bo mam bardzo ważne pytanie.
Potrzebuję w PHP zadeklarować zmienną lokalną dla bloku. To wszystko.
Pytałem w wielu miejscach, wszyscy na to, że się nie da. Może ty oczyścisz PHP z zarzutów?
Żeby nie było niejasności, zmienna lokalna dla bloku wygląda tak:
code:
C if (1) { int foo; } /* foo już nie istnieje */
code:
Perl if (1) { my $foo; } # $foo już nie istnieje
__________________
sort the flock (then, warn the "goats" & kill the "sheep");
kill them, dump qualms, shift moralities,
values aside, each one; die sheep! die to reverse the system
you accept (reject, respect);
Nie ma możliwości aby zmienna w if() była zmienną "lokalną".
A jaki masz ziomie masz konkretnie problem?
__________________
Każdy ładnie cztery elementy jednych tchem wymienia i ja też je wymienię, co tak będę głupio stał to: pieniądze, forsa i oczywiście szmal.
Nie mam problemu tylko się wściekam.
Zdarza mi się czasem coś napisać w PHP bo Perl nie ma porządnego wsparcia dla HTTP. Ruby też nie, poza kombajnem Rails, który nie jest mi do niczego potrzebny. PHP przypomina strasznie Perla i C, ale odkrywam różne irytujące drobiazgi.
Nie ma punktów sekwencyjnych z C, chociaż przecinek zachowuje się tak samo w innych przypadkach.
Nie ma deklaracji zmiennych co wymaga ode mnie siedzenia po 10 minut szukając literówki.
Ma obsługę SQL poniżej przeciętnej. Perlowe DBI to wzór do naśladowania. W PHP za to muszę pisać "pg_escape_string" kilkadziesiąt razy, w DBI wystarczy podać jako parametry.
Nazwy funkcji to makaronizmy. Wyżej wymienione "*_escape_string" to tylko jeden z nich. Inne to "escapeshellargs" i "htmlspecialchars". Zrobiłem w rezultacie coś bardzo głupiego:
code:
function hesc($str) { return htmlspecialchars($str, ENT_QUOTES); }
__________________
sort the flock (then, warn the "goats" & kill the "sheep");
kill them, dump qualms, shift moralities,
values aside, each one; die sheep! die to reverse the system
you accept (reject, respect);
Ruby i Rails jest spoko to po pierwsze.
quote:
Ma obsługę SQL poniżej przeciętnej. Perlowe DBI to wzór do naśladowania. (...)
quote:
Nie ma punktów sekwencyjnych z C.(...)Nazwy funkcji to makaronizmy. (...) odkrywam różne irytujące drobiazgi.itd.itp
quote:
Nie ma deklaracji zmiennych co wymaga ode mnie siedzenia po 10 minut szukając literówki.
quote:
W niektórych dystrybucjach E_NOTICE jest domyślnie ustawionym warningiem (razem z display_errors(...) zanim odkryłem "set_error_handler".
__________________
Każdy ładnie cztery elementy jednych tchem wymienia i ja też je wymienię, co tak będę głupio stał to: pieniądze, forsa i oczywiście szmal.
> No to też nie wina języka że Ci się paluszki plączą.
Dobry język pozwala na wymaganie deklaracji zmiennych i wykrywa literówki już w czasie parsowania kodu.
Może przy klikaniu CMS-ów nie sprawia to problemu, ale na CMS-ach i innych blogach pisanych przez nastolatków za grosze świat się nie kończy.
> Sumując, obawiam się że irytujesz się dla samej sztuki irytowania się.
> Naprawdę nikt nie broni pisać Ci web-aplikacji w C.
Każdy język z którego korzystam posiada jakieś unikalne zalety. Chociażby:
- C jest dobre do pisania mniej lub bardziej lowlevelowego kodu; posiada niewiele praktycznych reguł i jest świetnie przemyślane
- Perl nadaje się świetnie do parsowania tekstu i skomplikowanych struktur danych; posiada takie ciekawe zabawki jak auto-vivification, map(), zamknięcia, bloki BEGIN i END jak w awku, własne regexpy, które zostały przeniesione do C, PHP, Ruby'ego, Lispa i pewnie gdzieś jeszcze; sporo modułów, które zazwyczaj są przyzwoitej jakości
- Ruby ma czystą i prostą składnię, umie praktycznie to samo co Perl poza paroma drobiazgami jak niedopracowane moduły z stdlib i niewielką ilością innych
PHP nie posiada jakichkolwiek zalet poza dziecinnie prostą obsługą HTTP i HTML-a. Proceduralny interfejs nie ma nawet możliwości tworzenia wyjątków. Wszystko poza HTTP i HTML-em jest toporne i czasochłonne.
Sądzę też, że ktoś kto nie liznął programowania a zaledwie klika stronki WWW nie powinien wypowiadać się na temat programowania w ogóle.
__________________
sort the flock (then, warn the "goats" & kill the "sheep");
kill them, dump qualms, shift moralities,
values aside, each one; die sheep! die to reverse the system
you accept (reject, respect);
quote:
Wszystko poza HTTP i HTML-em jest toporne i czasochłonne.
quote:
Sądzę też, że ktoś kto nie liznął programowania a zaledwie klika stronki WWW nie powinien wypowiadać się na temat programowania w ogóle.
quote:
innych blogach pisanych przez nastolatków za grosze świat się nie kończy.
__________________
Każdy ładnie cztery elementy jednych tchem wymienia i ja też je wymienię, co tak będę głupio stał to: pieniądze, forsa i oczywiście szmal.
quote:
(...) bo doskonale zdaję sobie sprawę że od pisanie w PHP z "prawdziwym" programowaniem nie ma wiele wspólnego
__________________
Każdy ładnie cztery elementy jednych tchem wymienia i ja też je wymienię, co tak będę głupio stał to: pieniądze, forsa i oczywiście szmal.
if(){
$zmienna = '';
bla bla bla ifowe
unset($zmienna);
}
koniec pieprzenia
---
i jeszcze co do "Proceduralny interfejs nie ma nawet możliwości tworzenia wyjątków" spojrz na specyfikacje i dokumentacje php5.
a) przeszlo juz w obiektowy interfejs,
b) dzialaja juz wyjatki (try i catch sie klania).
maślak napisał:
> Ciężko mieć o to pretensje do języka który powstał jako "Personal Home
> Page Tools"
Jeśli istnieją "oficjalne" moduły takie jak pcntl a język nie posiada możliwości sprawdzenia errno po operacjach na plikach [1], coś jest nie tak.
[1] "posix_errno" obsługuje jedynie funkcje z przedrostkiem "posix".
> Oj Staszku. Nawet nie chciało Ci się pobuszować w manalu.
A to chyba dopiero od 5.1 jest standardowym modułem. Nie śledzę na bieżąco nowinek w PHP a manual czytałem wielokrotnie.
> Ruby i Rails jest spoko to po pierwsze.
A mnie Ruby zniechęcił paroma drobiazgami:
* Nie da się pisać szybko i bezproblemowo. Porównaj przykłady:
code:
% perl -le 'print length substr("foo123", 42)' 0
code:
% ruby -e 'puts "foo123"[42 .. -1].length' -e:1: undefined method `length' for nil:NilClass (NoMethodError)
code:
% ruby -e 'def foo(x); if x; puts x; else puts foo123; end; end; foo 1; foo nil' 1 -e:1:in `foo': undefined local variable or method `foo123' for main:Object (NameError) from -e:1
zalatuje łobiektowością przez słowo kluczowe "new".code:
throw new Exception
__________________
sort the flock (then, warn the "goats" & kill the "sheep");
kill them, dump qualms, shift moralities,
values aside, each one; die sheep! die to reverse the system
you accept (reject, respect);
bucior naskrobał:
code:
if(){ $zmienna = ''; bla bla bla ifowe unset($zmienna); }
code:
while (1) { my $fd; $fd = open $fd, "/dev/null" or die "$!" }
__________________
sort the flock (then, warn the "goats" & kill the "sheep");
kill them, dump qualms, shift moralities,
values aside, each one; die sheep! die to reverse the system
you accept (reject, respect);
quote:
PS najbardziej to się liczy i tak pomysł. Odwalać CMS-y (którym to przykładem rzucam na okrągło) można i do śmierci, ale fajniej jest napisać coś przydatnego i unikalnego. Albo dopisać do używanego programu nową funkcję i przesłać autorowi diffa. [/B]
quote:
W Rubym nie ma możliwości nie korzystania z wyjątków, korzystając z masy klas trzeba znać ich hierarchię wyjątków wspak i po rumuńsku.
__________________
Każdy ładnie cztery elementy jednych tchem wymienia i ja też je wymienię, co tak będę głupio stał to: pieniądze, forsa i oczywiście szmal.
quote:
Niewiem czy pracowałeś "w zawodzie" jako developer z szefem i project menagerem nad głową. W takiej sytuacji nie ma czasu i nie wypada męczyć Wacława nad cudownym kodem. Aplikacja zazwyczaj ma działać na wczoraj.
maślak nastukał:
> Proszę, wydrukuj sobie i powieś nad łóżkiem.
I w rezultacie trzeba "rescue" dla prawie każdej operacji. Porównaj z wycinkiem kodu na końcu mojego posta.
> Niewiem czy pracowałeś "w zawodzie" jako developer z szefem i project
> menagerem nad głową.
Aplikacyjek dla klientów nie zwykłem pisać z racji bycia adminem. Co napiszę udostępniam na licencji BSD i jak dotąd kilka osób dziękowało mi za nie.
Aplikacyjkę napisałem jedną, panel kliencki do hostingu. Z tym jest problem taki, że wymaga sporo operacji z uid 0. W rezultacie, panel pisany w pehapcu wywołuje suidy w C, które mu ufać nie mogą. Za wiele roboty to nie było, ale trzeba było się dobrze zastanowić na jakie sposoby skompromitowany użytkownik "panel" mógł próbować nadużyć przywileje wywołując suidy. I jak użytkownik mógł spreparować drzewo katalogów.
Najwięcej nawściekałem się na PHP, w którym nie dało się pisać tak:
code:
if open fd == -1 goto bail1 if read fd == -1 goto bail2 if open fd2 O_WRONLY|O_CREAT|O_EXCL == -1 goto bail2 if write fd2 == -1 goto bail3 [...] return 0 [...] bail3: unlink fd2 close fd2 bail2: close fd bail1: return -1
code:
if open fd == -1 return -1 if read fd == -1 close fd return -1 if open fd2 O_WRONLY|O_CREAT|O_EXCL == -1 close fd return -1 if write fd2 == -1 close fd close fd2 unlink fd2 return -1
code:
foreach my $file (@ARGV) { [...] my $tran = tran_start($dbh) or goto bail; { my ($ret) = query_fetch($dbh, q#SELECT rowid FROM sig where md5 = ? AND size = ?#, $md5, $size); defined $ret or goto bail; if ($ret) { $sigid = $ret->{'rowid'}; } else { query_do($dbh, q#INSERT INTO sig (md5, type, whitelistp, size) VALUES (?, ?, ?, ?)#, $md5, INDEX_IMAGE, 0, $size) or goto bail; my ($fields) = query_fetch($dbh, q#SELECT rowid FROM sig WHERE md5 = ? AND (? IS NULL OR ? = size)#, $md5, $size, $size); defined $fields or goto bail; unless ($fields) { warn "can't happen: stored entry doesn't exist"; goto bail; } $addp = 1; $sigid = $fields->{'rowid'}; } my ($lcount) = query_fetch($dbh, q#SELECT COUNT() FROM log where sig = ? AND log = ?#, $sigid, $path) or goto bail; if ($lcount->{'COUNT()'} == 0) { query_do($dbh, q#INSERT INTO log (sig, time, log) VALUES (?, ?, ?)#, $sigid, time, $path) or goto bail; } } tran_commit($dbh) or goto bail; $addcnt++ if $addp; next; bail: $failcnt++; do_nothing: tran_rollback($dbh) if defined $tran;
__________________
sort the flock (then, warn the "goats" & kill the "sheep");
kill them, dump qualms, shift moralities,
values aside, each one; die sheep! die to reverse the system
you accept (reject, respect);
http://blog.rightbrainnetworks.com/...me-we-broke-up/
W sumie po ponad 2 miesi?cach mocnego poznawania Rubiego i zabawy railsami przyznaj? ?e Staszek ma racje. Php ??ie.
__________________
Każdy ładnie cztery elementy jednych tchem wymienia i ja też je wymienię, co tak będę głupio stał to: pieniądze, forsa i oczywiście szmal.
quote:
Napisane oryginalnie przez MaslaV
http://blog.rightbrainnetworks.com/...me-we-broke-up/W sumie po ponad 2 miesi?cach mocnego poznawania Rubiego i zabawy railsami przyznaj? ?e Staszek ma racje. Php ??ie.
code:
(defmacro verbose-eval (&body clauses) `(progn ,@(loop for i in clauses collecting `(format t "~a = ~a~%" ',i ,i))))
code:
(defun generate-class (slots) (loop for i in slots for j = (intern (symbol-name i) :keyword) collect (list i :initarg j :initform nil))) (defmacro create-class (name slots) `(prog1 (defclass ,name () ,(generate-class slots)) (defmethod print-object ((object ,name) stream) (print-unreadable-object (object stream :type t) (loop for i in (quote ,slots) do (when (slot-value object i) (format stream "~a: ~a " i (slot-value object i)))))))) [...] (create-class nick (name host chanop-p halfop-p voice-p mode-char server))
__________________
sort the flock (then, warn the "goats" & kill the "sheep");
kill them, dump qualms, shift moralities,
values aside, each one; die sheep! die to reverse the system
you accept (reject, respect);
hm, a probowaliscie cos robic w pythonie?
quote:
Napisane oryginalnie przez [FPP]glan
hm, a probowaliscie cos robic w pythonie?
__________________
sort the flock (then, warn the "goats" & kill the "sheep");
kill them, dump qualms, shift moralities,
values aside, each one; die sheep! die to reverse the system
you accept (reject, respect);
Re: potrzebna pomoc z PHP
quote:
Napisane oryginalnie przez weirdo
(...)
Myślałem, że wszystkie języki wywodzące się z Algola posiadają zmienne lokalne dla bloku. A wszystko wskazuje, że PHP nie posiada.
Do JelonKa i Maslava: jak możecie pisać w takim gównie? Bo ja wysiadam.
__________________
http://wow.allakhazam.com/profile.html?310690
Po ilu critach ty się uśmiechniesz?
Frozen do expansion packa.
Wszystkie czasy są EU (PL). Aktualna godzina 13:45.