Estetic vorbind, pentru mine cel putin, un big eye sore cand vine vorba de sintaxa PHP-ului este acel dollar sign. In mod ciudat, nu m-am intrebat de unde provine - so far:
Because PHP was based on Perl which used , though the symbols Perl used were meaningful and plenty used to indicate the data type, ( such as @ used to indicate an array ) PHP just has .
Having a symbol to denote variables makes string interpolation simple and clear. Shell, Perl and PHP grew out of the need for quick and easy string manipulation
PHP was originally implemented as a set of Perl scripts written by Rasmus to manage his website – “PHP” stood for “Personal Homepage”. A number of other syntactical elements in PHP are reminiscent of Perl as well.
Perl probably picked up this from awk and sh, which likely picked it up from BASIC, which predates Unix by about 5-10 years.
Bit of trivia: the $ (or @ or % in Perl 5) is referred to as a sigil.
The ‘$’ symbol works semantically like the English word “the” in that it indicates a single value is expected.
Entire arrays (and slices of arrays and hashes) are denoted by ‘@’, which works much as the word “these” or “those” does in English, in that it indicates multiple values are expected.
Nu e chiar degeaba. Sa te vad cum faci o constructie de genul “suntem in anul $an” Sau sa te vad cum faci denumiri de variabile de genul $for, $class, $if, $while si alte cuvinte cheie. Sau constructii de tipul $$var. In plus, probabil e mult mai usor sa faci un parser care stie din start care tokeni sunt variable si probabil un astfel de parser e mult mai rapid decat unul care trebuie sa deduca care e variabila si care nu.
Odata ce codul dintr-un fisier este interpretat nu este necesar sa fie interpretat inca odata - deci diferenta se simte doar la start-up time (am testat bytecode cache in Ruby - care este un limbaj destul de heavy parsing-wise iar diferentele nu au fost mai mari de 10-20% la start-up time) in rest totul la fel, evident.
Ce e fals? Sper ca stii ca fara opcache php-ul este interpretat de fiecare data cand se executa, right? Apropo de celelalte nedumeriri, e vorba ca semnul $ permite constructii imposibile in limbajele care nu au asa ceva.
Las’ că-i bun $$$. Atât ca venit, cât și ca marker pentru variabile în PHP.
Probabil că pentru un echo mergea “Suntem in anul {an}”, dar eu, fiindcă sunt șmecher, mereu folosesc notația {$variabilă} chiar dacă nu mereu sunt array-uri complexe sau alte cele.
Ăsta nu e un motiv întemeiat. În Ruby ai puts 'suntem în anul #{an}'. Chiar și în PHP e recomandat să folosești echo "suntem în anul {$an}". Probabil ai ceva asemănător în alte limbaje.
Asta cu clasele nu e deloc un edge-case. Este varianta cea mai simpla de a implementa un MVC. Pe baza URL-ului determini numele clasei necesare, o incarci prin autoload si o instantiezi. Sigur ca poti face asta si altfel, dar de ce sa fie complicat cand poate fi simplu?
class MyClass; end
some_outside_class = 'MyClass' # use a white-list in real life or better yet just avoid it
klass =
begin
Module.const_get(some_outside_class)
rescue NameError
puts "The #{some_outside_class} class does not exist"
end
exit unless klass
instance = klass.new
instance.object_id
# => 70131611385580
Less magic, fully explicit ironic cum some people se plang ca Ruby este full of magic
OpenBSD/FreeBSD all the way Oricum ai sarit in straw-man repede.
M-ai intrebat ce reprezinta a modern PHP stack → DigitalOcean docs este ceea ce era http://articles.slicehost.com in the good old days → a minimal entry point of what people use.
Era o gluma, nu era cu intentia de a ofensa. Si nu, *BSD-ul nu e chiar o optiune. Am administrat candva vreo 20 de servere FreeBSD si nu mi-as dori sa repet experienta. Dupa cateva ore de make buildworld si mergemaster, vedeai numai puncte negre in faţa ochilor.
Ideea de “troll” era ca in momentul de faţă PHP7 nu e o optiune viabila, cel nu pe CentOS sau RHEL. Si oricum, “viteza” era doar o posibilitate exprimata de mine. Poate cu semnul $, viteza a crescut doar cu 1%, habar n-am. Cert e ca e mai usor si mai simplu de parsat.
Iar faptul ca $ e superfluu… Well, si numai din motive de backward-compatibily nu ai putea sa-l mai scoti acum din limbaj. Pur si simplu exista constructii care n-ar putea fi facute altfel, cel putin nu simplu. Probabil n-ar fi fost suficient un find -name ‘*.php’ -exec sed -i ‘s/$//’ {} ‘;’ ci ar trebui rescrise la mana sute de milioane de linii de cod.
Ma rog, n-as merge chiar atat de departe Dar uite, exista si alte locuri in care ai nevoie sa faci o parsare simpla si rapida, de exemplu syntax highlighting in IDE-uri. Una e sa “prinzi” pattern-urile variabilelor cu regexp, alta e sa faci un parser care sa deduca din context care e variabila si care nu, mai ales ca nu e nevoie sa declari tipul.