PHP and the dollar sign

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 $.

via. http://stackoverflow.com/questions/3073812/why-php-variables-start-with-a-sign-symbol

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

via http://stackoverflow.com/questions/3596474/what-is-the-purpose-of-php-having-a-symbol-the-dollar-sign-in-front-of-each-va

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.

via https://www.quora.com/Why-we-use-dollar-symbol-before-variables-in-PHP

Si daca tot am ajuns la PERL:

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.

via http://search.cpan.org/~shay/perl-5.24.1/pod/perldata.pod#Variable_names

More about the sigil via http://search.cpan.org/~shay/perl-5.24.1/pod/perldata.pod#Identifier_parsing

tl;dr: este un vestigiu din PERL fara aparent vreo utilitate practica (din moment ce nu este folosit ca sigil) decat to make my eyes bleed :laughing:

11 Likes

Nu e chiar degeaba. Sa te vad cum faci o constructie de genul “suntem in anul $an” :slight_smile: 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.

1 Like

exemplu? don’t get what you’re getting at :slight_smile:

Huh?

Huh?

Fals.

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.

1 Like

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.

De exemplu:

$an = 2017;
echo “Suntem in anul $an”;

Ghici ce va afisa.

1 Like

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.

Pai si cârligele alea sunt mai frumoase decat un simplu semn “$”? :slight_smile:
Dar hai sa vedem un alt exemplu:

$class = “MyClass”;
$instance = new $class;

1 Like

Tu acum cauți edge-cases. Dar tind să cred că nu ar fi vreun impediment în această privință.

Javascript nu pare a avea probleme de genul.

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?

2 Likes
$class = "MyClass";
$instance = new $class;

actually this is bad practice, in Ruby arata asa:

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 :slight_smile: ironic cum some people se plang ca Ruby este full of magic


Ce inseamna “modern php stack”?

quick google search:

Eh, PHP7. Asta nu prea e o solutie pentru cei care doresc securitate si stabilitate. Oamenii seriosi nu folosesc Ubuntu la servere :slight_smile:

Serios ? Tocmai ai pierdut orice argument pe care l-ai și avut și ești oficial un troll.

JS este de 10 ori mai rapid ca php și nu ai $, adică poți să-l folosești dacă chiar ai un fetish cu el.

let echo = x => console.log(x); $yolo = 5; echo($yolo);

va merge dacă ai nostalgie pe php. dar eu nu îi simt lipsa.

A da în js acum ai console.log(Nume: ${firstName} + ${lastName}), e mai util $ asa. (nu afișează backtick-urile)

Wow, pana acum nu m-a facut nimeni troll. Si de ce ma rog sunt un troll?

1 Like

OpenBSD/FreeBSD all the way :slight_smile: 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.

2 Likes

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.

Daca tot glumim:

Because PHP’s creator didn’t know how to write a parser. So a crutch was needed to identify identifiers.

via http://softwareengineering.stackexchange.com/questions/124994/why-do-php-variables-need-to-be-preceded-with-a-dollar-sign

Ma rog, n-as merge chiar atat de departe :slight_smile: 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.

Pe logica asta ar trebui sa revenim la ASM.