PHML - preparsed PHP

PHML je ideja o jeziku koja je nastala odlukom da se ubacim pred kompajler PHP-a i da tako povećam stupanj kontrole i fleksibilnosti prilikom rada sa PHP-om.

PHML se temelji od tri cjeline:

  1. Pisanje buety PHP-codea

  2. Kontrola vidljivog scopea varijabli između različitih modula .phml-a

  3. Template engine - mix PHP codea sa HTML-om.

     1. Buety PHP
     	Buety php za sada radi poprilično malo toga, ali zato jednu ali vrijednu stvar:
     	$person.age <==> $person["age"] 
    
     	I pored toga malo igranja sa sintaksom, npr buety PHP omogućava pisanje:
    
     		for(10)  			-> $for($x=0;$x<10;$x++);
     		for(10 as $y)  		-> $for($y=0;$y<10;$y++);
     		for(10;20) 			-> $for($x=10;$x<20;$x++);
     		for(10;20 as $y) 	-> $for($y=10;$y<20;$y++);
     		each($list)  		-> foreach($list as $key=>$value);
    
    
     	(Buety PHP će se razvijati lagano putem...to trenutno nije sila)
     	
     	** Dalje u tekstu gdje god se spomene php_code, smatra se na pisanje buety_php codea. **
    
     2. Kontrola vidljivog scopea varijabli između različitih modula .phml-a
    
     	Cilj je omogućiti uključiti treću stranu u aplikaciju putem nekog .phml modula, a da isti ne može ništa strgati u postojećoj aplikaciji.
     		-da isti ima ograničen scope skripti po kojima može pisati, ili čitati ih
     		-isto tako da ima ograničen scope varijabli koje može vidjeti ili po kojima može pisati. (Svaki RW scope da se zasebno može kontrolirati)
    
     	Ovo je jedan od glavnih razloga nastanka PHML-a. Ne vidim kako drugačije preuzeti ovu kontrolu, nego na razini kompajliranja codea.
    
    
     3. Template engine - omogućava pisanje mix php codea sa HTML-om. Ponešto toga tu veći ima...
    
    
     	+	@phml('path/file.phml', $Model)  Uključivanje eksternog phml-a unutar phmla. Model je php varijabla koja definira model koji se prosljeđuje u inkludanii template (.phml)
     	+	@layout('path/file.phml', $Model) Uključivanje trenutnog phml-a u vanjski phml template (layout). Model je php varijabla koja definira model koji se prosljeđuje u layout template (.phml)
     	+	@body() -> instrukcija unutar layouta gdje će se renderirati body/content onog templatea koji koristi ovaj layout
     	+	@section('name'){  -> definicija sekcije unutar nekog .phml filea, koju može renderirati bilo koji template koji je uključen u template koji je kreirao sekciju.
     			//PHML code is here...
     		}
     	+	@renderSection('name')  -> renderiranje sekcije
    
     	+	@{ 
     			// Buety PHP code goes here    -> ova instrukcija nas u bilo kojem momentu može vratiti na razinu da pišemo skoro čisti php_code
     		}  
    
     		@@{ 
     			// Raw php code goes here    -> ova instrukcija nas u bilo kojem momentu može vratiti na razinu sirovog php_code
     		}  
    
    
     	+	@each(php_code){
     			//PHML code is here...etc:
    
     			This is HTML with @variable included in this HTML...and mix such a this is always PHML code.
     		}
    
     	+	@for(php_code){
     			//PHML code is here...
     		}
    
     	+	@if(php_code){
     			//PHML code is here...
     		}
    
     	+	@else if(php_code){
     			//PHML code is here...
     		}
    
     	+	@else(php_code){
     			//PHML code is here...
     		}
    
    
     	+	@someFunkc() 		-> ekvivalent phu: <?php echo someFunkc(); ?> 
     	+	@$someFunkc() 		-> ekvivalent phu: <?php echo $someFunkc(); ?> 
     	+	@someFunkc.method() -> ekvivalent phu: <?php echo $someFunkc['method'](); ?> 
     	+	@someFunkc::method()-> ekvivalent phu: <?php echo someFunkc::method(); ?> 
    
     	+	@x je @y   -> ekvivalent phpu:	<?php echo $x; ?> je <?php echo $y; ?> 
     	+ 	@x + @y    -> ekvivalent phpu:	<?php echo($r + $y); ?> 
     	+	@x; + @y   -> ekvivalent phpu:	<?php echo($x);?> + <?php echo($y);?>
     	+	@{$x+$y}   -> ekvivalen <?php $x+$y; ?> 
    
     	+	@Model.nesto -> referencira na varijablu koja je prosljeđena kao model u includani .phml file -> phml::include("path/file.phml", $model);
    

Kako je sam PHP jezik koji većinom radi sa HTML sadržajem, tako će PHML u startu objediniti ono što nude engini za mix backenda sa HTML-om, poput Blade-a, ili ono što imamo u C# svijetu pod nazivom Razor.

Od tuda i ideja za naziv: PH( p ) +( ht )ML = PHML. :slight_smile:
No glavni zadatak phml-a je nešto drugo…i rekao bih dosta zafrknutije. (Pod točkom (2.) od spomenute tri cjeline)

Heto, podjelih ovo…ako želite biti dio stvaranja buety sintakse PHP-a i robusnih i nezavisnih PHP modula…slobodno udarajte sa prijedlozima i kritikom na moje ideje o sintaksi.

Pod time ne mislim na kritike i generalno raspravljanje o tome kako nema smisla pre-komapjlirati code.
Ok mi je i ta rasprava, ali sve na svom mjestu. Za takvu raspravu sam unaprijed pripremio i otvorio sljedeću temu: Zašto pre-kompajlirati code …pa tamo udarajete ako vam volja.

žž.

Na pamet mi pada recimo smarty template koji je dovoljan, a radi odlicno + mogucnostbpisanja vlastitih funkcija.

Ne razumijem sto tocno pokusavas dobiti?

  1. Pisanje buety PHP-codea
  2. Kontrola vidljivog scopea varijabli između različitih modula .phml-a
  3. Template engine - mix PHP codea sa HTML-om.

Pod 1.
(ovo trenutno nije jako bitno u cijeloj priči, iako je fora imati ovakvu kontrolu i fleksibilnost na ovoj razini)
…uglavnom, da mogu biti kreator fluidnije PHP sintakse. (za sada kako mi se prohtije ću nabacat svega…pa ću vidjeti kuda će to izaći. I tek tamo u nekom kasnijem koraku malo racionalizirati između korisnog/nekorisnog. Kvalitetno osmišljenog i potrebnog da se redefinira…itd.)

Pod 2.
To se veže na ovu temu: Kako postići modularan i robusan PHP framework

Znači to je identična stvar. Ovo je zaprvo solucija tom problemu. Tamo nisam htio niti dati hint da ću raditi svoj pre-parser, čisto da čujem koje su varijante. Raspitivao sam se za solucije na više foruma i nisam čuo ništa što bi mi parilo da je dostupno rješenje. Tako da sam prestao vjerovati da postoji rješenje tom problemu unutar postojećih okvira.
Da bi bolje razumio problematiku, baci pogled i na ovu temu: Što je zapravo društvena mreža (Facebook)
To je konačan proizvod do kojega želim doći.

Razmisli samo o onome što se postiže sa Fb API-em. Developeri Facebooka metodama API-a ograničavaju što može neka aplikacija raditi sa podacima od Facebooka.
Ja želim tu modularnost postići bez da to ide preko API-a. Ali u suštini treba izaći na slično.

Samo u varijanti FB API-a developer piše PHP code sa dodatnim metodama koje je dodao FB API
A u varijanti PHML-a će se te metode svesti na razinu sintakse programskog jezika …i bit će ih moći univerzalno reciklirati između bilo kojih sustava…gdje imamo parent komponentu koja uključuje child komponentu.
U slučaju Facebooka, parent komponenta je Facebook sam posebi…a child komponenta je neka aplikacija koja se razvija na osnovi FB API-a.

Pod 3.
To je ništa drugo nego svojstvo PHML-a da je tako zamišljen da odmah bude nešto poput postojećih PHP template engine-a. Znači integracija HTML+PHP se inače radi sa nekim od PHP template enginea, dok je PHML zamišljen da u startu bude ta integracija sam po sebi.

Sve skupa je ovo prekomplicirano i nema smisla.

Komplicirano je dosta…a ima li smisla, saznat ću. Ja vjerujem da ima.