DevProTalk

DevProTalk (http://www.devprotalk.com/index.php)
-   PHP (http://www.devprotalk.com/forumdisplay.php?f=9)
-   -   PHP 5.3 i PHP6 deprecetated features (http://www.devprotalk.com/showthread.php?t=7975)

holodoc 17. 10. 2009. 23:45

Citat:

Originalno napisao bluesman (Napišite 74241)
Pa pazi ovo, koji je OBJEKTIVAN razlog da se onemogući:

PHP kôd:

set_magic_quotes_runtime(0); 

A možeš i dalje:
PHP kôd:

ini_set("magic_quotes_runtime"0); 

Prvo je deprecated, a drugo je sada ok? Zbog čega?

I magic_quotes_runtime od verzije 5.3 spada u DEPRECATED kategoriju kao i sve što je na bilo koji način povezano za magic_quotes sistemom.
Citat:

Originalno napisao bluesman (Napišite 74241)
Slažem se da su te magic quotes samo pravile nepotrebnu zabunu i bile uzrok mnogih bug-ova, ali zašto izbaciti funkciju? Kada bi stavili da funkcija stoji samo ne radi ništa (jer je ionako izbačeno magic quotes) je daleko bolje za backward compatibility nego da kompletno izbace funkciju pa se generiše fatal error i puca script.

Još od kako se prvi put pojavio na PHP sceni za magic_quotes sistem je jasno stavljeno do znanja da je zbog kompatibilnosti sa starijim verzijama PHPa i potencijalnih problema sa konfiguracijama servera potrebno da kod bude u mogućnosti da funkcioniše i kada je magic_quoutes uključen i kada je isključen. Ja mislim da je to bila ubedljivo najčešće navođena napomena po raznim tutorijalima, kursevima i dokumentaciji. Ako prelazni period od pa sad već skoro više od 10 godina od kako se termin magic quotess prvi put pojavio (PHP v2) nije dovoljan da se neke loše programerske navike eliminišu onda zaista nemam komentara.
Citat:

Originalno napisao bluesman (Napišite 74241)
Takođe sam puno koristio {} u stringovima, a šta sada da radim? Da pretražujem svuda gde sam to koristio da mi script ne bi pucao zbog gluposti.

"Vitičaste" zagrade u PHP5.3 i dalje omogućavaju da string podaci u sebi sadrže blokove koji referenciraju promenjljive tipa "Nešto {$promenjljiva} još nešto" ali nije moguće više pristupati karakterima stringa putem vitičastih zagrada tipa $promenjljiva{8}.
Citat:

Originalno napisao bluesman (Napišite 74241)
Tako će i ovi što prave razne Joomle, CodeIgnitere i ostale slične stvari da totalno pošize od milijarde pitanja "od jednom mi se pojavljuje neka greška" ili "ne radi mi sajt" ili "prikazuje mi se prazna strana".

Neće oni da šize nego korisnici tih sistema mada iskreno i bez novog PHPa nisu se nešto proslavili :)
Citat:

Originalno napisao bluesman (Napišite 74241)
Što se tiče hosting provajdera, tu se na žalost najmanje pitaš ti. Prvo što retko imaš uticaja na izbor provajdera, a drugo što imaš još manje uticaja na njihove odluke.

Ovo je sada već pre svega pitanje ozbiljnosti naručioca posla jer ako se već na samom početku škrtari na kvalitetnom hostingu mislim da je pametnije celu stvar odmah na početku saseći i sačuvati živce. A ozbiljni hosting provajderi itekako vode računa o softverskoj sceni i potencijalnim problemima koji mogu da se jave sa softverom njihovih klijenata. Čak i da se kasnije tokom eksploatacije stvori neki problem izazvan svojevoljom provajdera postoji jedna jako efikasna pravna zaštita od maltretiranja klijenta a to je navođenje tačnih tehničkih specifikacija eksploatacionog okruženja. Odgovarati za samovolju hosting provajdera koji je samoinicijativno instalirao problematičnu verziju PHPa uprkos tehničkoj specifikaciji bi bilo otprilike isto kao kada bi neko sada tužio razvojni tim zato što je udario grom u hosting server na kome se nalazi sajt :)

Usput evo jednog interesantnog dokumenta za one koje zanima šta je to novo što PHP 5.3 (realno i PHP "šestica") zaista donosi sa sobom.

http://conf.phpquebec.com/slides/200...uebec_2009.pdf

bluesman 18. 10. 2009. 01:27

Jel' vas dvojica mene nešto palite ili šta? :D

Citat:

Originalno napisao dinke (Napišite 74246)
Sticem utisak da ovo nisi skapirao. Ne radi se o iskljucenju "complex" sintakse (tipa "ovo je string sa varijablom {$var}" vec o tretiranju stringa kao niz (kao u C-u) tipa treci char je $string[2]. Ranije je za to moglo da se koristi $string{2} a sada je to deprecated.

A onda i mister holodoc:

Citat:

Originalno napisao holodoc (Napišite 74248)
"Vitičaste" zagrade u PHP5.3 i dalje omogućavaju da string podaci u sebi sadrže blokove koji referenciraju promenjljive tipa "Nešto {$promenjljiva} još nešto" ali nije moguće više pristupati karakterima stringa putem vitičastih zagrada tipa $promenjljiva{8}.

'ajde? :) Pa o tome i pričam, od jednom promene sintaksu i ne možeš da pročitaš određeni karakter stringa sa {N} već sa [N]... i to je kao ok u verziji većoj od 0.1 beta promeniti sintaksu jezika? I kada to ostane - ide parse error i pukne script.

I onda dinketovo rešenje je:
Citat:

Originalno napisao dinke (Napišite 74246)
Kao i za ereg(i) i kod ovoga jedan search/replace resava problem :)

^ Zbog takvog predloga sam siguran da me u stvari zajebavaš :). To možda i prođe kada imaš 1 ili 2 sajta. Šta da radim sa ostalim sajtovima? Da menjam jedan po jedan narednih 6 meseci?

Velika je razlika između "depricated" i "parse error", a to drugo će upravo da se desi kada izbace to što su rekli. Za ovo prvo može da se isključi notice, a zbog ovog drugog ti ne radi script. Ne znam da li me razumete? Svi scriptovi u kojima ostanu funkcije koje su ovi odlučili da izbrišu, ili "nepostojeća sintaksa", će generisati error - ne rade - kraj! Nije više ni u pitanju da li ti smeta E_NOTICE ili bilo šta - script se i ne izvrši.

dinke 18. 10. 2009. 13:40

^Za Beano kazes lepo adminima da ne stavljaju nista novije od PHP 5.3 i resen problem (pod uslovom da te poslusaju, meni uredno trchi neki mysql 5.1 preview na production masini, bez komentara).

Sto se sajtova ostalih klijenata tice, mozda je stvarno vreme da pocnes da potpisujes ugovor da taj i taj sajt garantovano radi za tu i tu verziju PHP-a, apache-a, mysql-a bla bla bla ... i da odrzavanje (sto ce reci izmedju ostalog i update koda u ovakvim slucajevima kada je narusen backward compability) naplacujes posebno.

bluesman 18. 10. 2009. 16:08

Da, slažem se da to može da šljaka u takvom "idiličnom" okruženju (mada se i tamo dešava da neko instalira nešto 'nako... da proba), ali postojao je život i pre i posle Beano :)

holodoc 18. 10. 2009. 16:30

Citat:

Originalno napisao bluesman (Napišite 74251)
'ajde? :) Pa o tome i pričam, od jednom promene sintaksu i ne možeš da pročitaš određeni karakter stringa sa {N} već sa [N]... i to je kao ok u verziji većoj od 0.1 beta promeniti sintaksu jezika? I kada to ostane - ide parse error i pukne script.

Iskreno ni ne sećam se kada sam poslednji put video kod koji tako manipuliše sa stringovima tako da što se mene lično tiče ovo i nije nešto što će mi nedostajati.

S druge strane PHP vuče sintaksičke korene iz C-a u kome se elementima stringa (karakterima) pristupa uglastim zagradama a[0], a[1] tako da ne vidim razlog zbog čega je uopšte i uvedena ova alternativna sintaksa sa vitičastim zagradama osim da se nastavi tradicija PHPa da omogućava previše različitih načina da se jedna ista stvar odradi i tako stvori dodatni prostor za greške.

bluesman 18. 10. 2009. 17:53

Molim te, daj mi primer kako ti "izvlačiš" recimo 3 karakter iz nekog stringa. Stvarno me interesuje koje je to bolje i preglednije rešenje.

I da, kada sam ja prvi put pokušao tako nešto, i ja sam probao sa $string[N], očekujući da je ista sintaksa kao u C, međutim ako su već uveli nešto (koliko god se [ne]slagali sa tim) što se vuče jako dugo, kako mogu tek tako da odluče da to izbace od sledeće verzije.

dinke 18. 10. 2009. 19:46

Potpisujem da je u ranijim verzijama manuala stajalo samo $string{2} tj. u dokumentaciji je stajalo da je obavezno koriscene viticastih zagrada za pristup x-tom elementu niza a ne (kao u C-u) uglastih.

E sad da li je to i ranije radilo i sa uglastim i sa viticastim pre nego se neko setio da to i dokumentuje - ne bih znao.

@bluesman
Fakat najjednostavniji nacin da izvuces n-ti element u stringu je bas ovaj pristup :)

krcko 18. 10. 2009. 20:30

sto se tice {} vs [] sintaxe za pristupanje pojedinacnim karakterima stringa, ja mogu da potpisem da je u predhodnim verzijama manuala (pre nego sto je 5.3 i zapocet) pisalo da {} sintaxa nije preporucljiva i da treba koristiti [].

ja se php-om bavim od verzije 5 (mada sam bio prinudjen i da pisem php4-compatible kod) i nikada nisam koristio {} vec bas []...

a sto se samog PHP 5.3 tj PHP 6 tice meni se neke "novotarije" bas svidjaju (closures.. hell yea!), dok su mi neke mnooogo lose uradjenje (tipa / u nejmspejsima!?!?! to mi toliko izgleda neprirodno i ruzno da nemam reci... mogli su lepo da koriste . ili eventualno : ako im je . previse tesko za implementaciju - a svaki context-aware parser/kompajler bi bez problema mogao u ovakvoj situaciji da podrzi tacku kao delimiter)...

i thumbs up za sve deprecated fje! (mada se slazem da je mnogo bolje ostaviti fju koja ne radi nista nego dizati E_DEPRECATED, ali sa function_exists lako moze da se 90% koda koji koristi te fje natera da igra po pravilima sestice...)

holodoc 18. 10. 2009. 21:37

Citat:

Originalno napisao bluesman (Napišite 74275)
Molim te, daj mi primer kako ti "izvlačiš" recimo 3 karakter iz nekog stringa. Stvarno me interesuje koje je to bolje i preglednije rešenje.

Pretpostavljam da ovde misliš na pristup "trećem" karakteru ali u svakom slučaju dotaći ću i varijantu "izvlačenja" dela stringa.

Dakle, ako bih ikada bio u situaciji da moram da pristupim sadržaju određenog indeksa stringa u PHPu onda bih sigurno koristio sintaksu sa uglastim zagradama $string[index] ne zato što teram inat ili što je ona možda bolja i preglednija već zato što je svakako logičnija, tradicionalnija i ustaljenija varijanta od "vitičaste" alternative. Drugim rečima svako ko se ikada dotakao bilo kog programskog jezika koji podržava manipulaciju stringova kroz nizove zna da se indeksima stringa pristupa korišćenjem uglastih zagrada. To što PHP podržava i ovu alternativnu sintaksu je jedna od njegovih specifičnosti koja verovatno nikada nije trebala da ugleda svetlost dana ali valjda je postalo jasno do sada da je PHP tehnologija za koju važi pravilo da nove i specifične stvari i ne moraju nužno da budu bolje :)

Što se tiče "izvlačenja" dela stringa tu verovatno ne bi trebalo da bude nekakve nedoumice. PHP je bar takav da je velika verovatnoća da za sve što može da se reši jezičkim konstruktima postoji i odgovarajuća funkcija. U konkretnom primeru substr bi trebalo da bude dovoljno dobro rešenje.
Citat:

Originalno napisao bluesman (Napišite 74275)
I da, kada sam ja prvi put pokušao tako nešto, i ja sam probao sa $string[N], očekujući da je ista sintaksa kao u C, međutim ako su već uveli nešto (koliko god se [ne]slagali sa tim) što se vuče jako dugo, kako mogu tek tako da odluče da to izbace od sledeće verzije.

Nažalost ovaj deo oko "razlike u sintaksi sa C jezikom" nisam baš razumeo :1018: Sledeća dva primera rade potpuno istu stvar a jedina realna razlika koju ja vidim u njima su čisto vezane za sintaksičke razlike u jezicima.
Kôd:

#include <stdio.h>

int main(){
    int i;
    char a[25] = "Test string!";
   
    for(i = 0;i < strlen(a); i++){
        printf("%c", a[i]);
    }       
    return 0;
}

Kôd:

<?php
$string = "Test string!";
for($i = 0; $i < strlen($string); $i++){
    echo $string[$i]; 
}
?>

Da rezimiram. "Vitičasta sintaksa", posebno njen kompleksni oblik, je po meni bila i još uvek jeste potpuno nepotrebna stvar u PHPu i iskreno mogu da kažem da mi se odluka o tome da otpadne u "kastriranoj" 5.3 verziji čini kao potpuno pozitivna stvar. Ono gde ljudi očigledno greše kada kažu da je to potpuno neprihvatljivo zbog kompatibilnosti sa postojećim kodom je što PHP 5.3 smatraju logičnim nastavkom 5.x game što jednostavno nije tačno. PHP 5.3 je čista "izvidnica" novoj "šestici" i kao takvog ga treba i posmatrati a siguran sam da dok nova verzija ne ugleda svetlost dana da će bar još koja velika revizija "petice" da izađe.

Inače svako može da učestvuje u davanju predloga vezanih za nove verzije i revizije PHPa putem ogromnih mailing lista na matičnom sajtu a ono što danas nosi naziv "PHP 5.3" verovali ili ne je uglavnom plod diskusije i smerova na koje je sama zajednica najviše uticala :)

holodoc 18. 10. 2009. 21:53

Citat:

Originalno napisao dinke (Napišite 74277)
Potpisujem da je u ranijim verzijama manuala stajalo samo $string{2} tj. u dokumentaciji je stajalo da je obavezno koriscene viticastih zagrada za pristup x-tom elementu niza a ne (kao u C-u) uglastih.

Nažalost koliko god PHP manual bio koristan opšte je poznato da on nije baš bez grešaka pa se često dešavalo da se neke stvari potpuno pogrešno dokumentuju. Da li je to bio slučaj i sa ovim primerom ne bih znao ali kompleksna "vitičasta" sintaksa je uvedena u PHP 4 dok recimo klasično indeksiranje stringova ako me pamćenje ne vara postoji još od PHP verzije 2 (naravno one "prepisane" savremenije).


Vreme je GMT +2. Trenutno vreme je 11:01.

Powered by vBulletin® Verzija 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Copyright © DevProTalk. All Rights Reserved.

Mišljenja, saveti, izjave, ponude ili druge informacije ili sadržaji nastali na Sajtu su vlasništvo onoga ko ih je kreirao, a ne DevProTalk.com, tako da ne morate da se oslanjate na njih.
Autori poruka su jedini odgovorni za ovakve sadržaje. DevProTalk.com ne garantuje tačnost, kompletnost ili upotrebnu vrednost informacija, stavova, saveta ili datih izjava. Ne postoje uslovi pod kojima bi mi bili odgovorni za štetu ili gubitak koji je posledica bilo čijeg oslanjanja na nepouzdane informacije, ili bilo kakve informacije nastale kroz komunikaciju između registrovanih članova.
Web sajt može sadržavati linkove na druge web sajtove na Internetu ili neke druge sadržaje. Ne kontrolišemo niti podržavamo te druge web sajtove, niti smo pregledali bilo kakve sadržaje na takvim sajtovima. Mi nećemo biti odgovorni za legalnost, tačnost ili prikladnost bilo kog sadržaja, oglasa, proizvoda, usluga ili informacije lociranim na ili distribuiranih kroz druge web sajtove, niti za bilo kakvu štetu nastalu kao posledica takvih informacija. DevProTalk.com drži i čuva druga prava vlasništva na web sajtu. Web sajt sadrže materijale zaštićene copyright-om, zaštitne znakove i druge informacije o pravu vlasništva ili softver. Članovi mogu poslatu informacije zaštićene pravima vlasništva njihovih nosilaca i ona ostaju zaštićena bez obzira da li su oni koji prenose te informacije to naveli ili ne. Osim informacija koje su u javnom vlasništvu ili za koje dobijete dozvolu, nemate pravo da kopirate, modifikujete ili na bilo koji način menjate, objavljujete, prenosite, distribuirate, izvršavate, prikazujete ili prodajte bilo koju informaciju zaštićenu pravima vlasništva. Slanjem informacija ili sadržaja na bilo koji deo DevProTalk.com, Vi automatski dozvoljavate i predstavljate garanciju da imate pravo da dozvolite DevProTalk.com ili članovima DevProTalk.com bespovratnu, kontinualnu, neograničenu, globalnu dozvolu da koriste, kopiraju, izvršavaju, prikazuju i distribuiraju takve informacije i sadržaje i da iz takvih sadžaja koriste bilo koji deo u bilo koje svrhe, kao i pravo i dozvolu da koriste gore navedene sadržaje. Svi zaštitni znakovi (trademarks), logotipi, oznake usluga, firme ili imena proizvoda koji se pominju na ovom web sajtu su vlasništvo kojim raspolažu njihovi vlasnici.