Autor Zpráva
Kubo2
Profil
Pekné popoludnie!

V posledných dňoch na PHP Internals mailingliste prebieha pomerne živá diskusia o tom, ako do budúcna naložiť s kľúčovým slovom var, ktoré sa po nástupe PHP 5 a novej OOP syntaxe stalo takpovediac syntaktickým aliasom k modifikátoru prístupu public. Môj názor je, že okrem identickej funkcionality má každé z týchto kľúčových slov naviac inú sémantiku:

• zatiaľ čo public je vyslovene modifikátor prístupu, tvrdiaci, že k danej premennej (či metóde) má prístup ktokoľvek zvonka (tj. deklaruje rozhranie entity),
• kľúčové slovo var označuje premennú, ktorá má byť v istom čase interne naplnená (napríklad pri inicializácii objektu továrňou pred jeho použitím), ale nemá byť súčasťou verejného rozhrania entity.

Na odkázanom mailingliste som uviedol konkrétnejší príklad demonštrujúci túto sémantiku na použití nette/di:

<?php

class HomepagePresenter extends Nette\Application\UI\Presenter {

    /** @var Model\FooService @inject */
    var $fooService;

    public function renderFooExample() {
        // tu môžeme použiť $this->fooService, pretože sa DI kontajner už o to postaral
    }
}

Kde použitím var si označím požadované služby, zatiaľ čo public budú rôzne parametre a nastavenia, a tým interným spôsobom napĺňania bude v tomto prípade DI kontajner.

TL;DR

Aký je váš názor na prítomnosť kľúčového slova var v PHP? Vidíte v ňom nejaké konkrétne (či už reálne alebo sémantické) využitie?

(V prípade, že by vás zaujímala celá diskusia na mailingliste, začnite odtiaľto.)
Martin2
Profil *
Kubo2:
Vidíte v ňom nejaké konkrétne (či už reálne alebo sémantické) využitie?
Ne.

Takže tvůj názor je, že var by mělo označovat veřejnou proměnnou (a veřejná být musí, jinak by nemohla být automaticky injektována), kterou ale nemá nikdo používat?
Myslím, že je to blbost. Sémantika je podle mě mizerný důvod pro existenci čehokoliv v programovacím jazyce. var by mělo být zrušeno, stejně jak je ve verzi 7 zrušena stará syntaxe konstruktorů.
Kubo2
Profil
Martin2:
Takže tvůj názor je, že var by mělo označovat veřejnou proměnnou (a veřejná být musí, jinak by nemohla být automaticky injektována), kterou ale nemá nikdo používat?
Presne tak.

var by mělo být zrušeno, stejně jak je ve verzi 7 zrušena stará syntaxe konstruktorů.
Tu je práve ten problém, o ktorom sa na odkázanom mailingliste mimo iného diskutuje. Na odstránenie PHP 4 konštruktorov bol totiž dôvod v podobe nejednoznačnosti zavolania konštruktoru v PHP 5. Kľučové slovo var je v dnešnej dobe v podstate alias, pre odstránenie ktorého neexistuje nejaký reálny dôvod.
Martin2
Profil *
Kubo2:
var je v dnešnej dobe v podstate alias, pre odstránenie ktorého neexistuje nejaký reálny dôvod.
Důvod je jednoznačnost jazyka a přehlednost programů. Aliasy vzniklé pro zachování zpětné kompatibility se v současnosti v PHP spíš postupně likvidují. A to je dobře.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: