19. Ošetření otevíracího <?php

Ilustrační obrázek k článku: Ošetření otevíracího <?php
Zní to jako sci-fi, ale opravdu to funguje: jeden soubor spustitelný v PHP i v JavaScriptu. Dnes si otestujeme naši první Combiscriptovou knihovnu.

Zbývá rozhodnout co s <?php na začátku knihovny.

PHP se bez něj opravu neobejde a v JS vadí. Situace vypadá neřešitelně.

Nicméně můžeme využít principu, že na začátku souboru ještě před <?php se jazyk PHP neiterpretuje protože PHP je ještě v HTML kontextu. Takže pokud <?php z hlediska JS zakomentuji, tak se v PHP toto zakomentování jen normálně odešle na výstup. A to mohu ošetřit. Proto naše první knihovna bude vypadat takto:

  1. //<?php
  2. function my_fact($n)
  3. {
  4. if ($n<=1) return 1;
  5. return $n*my_fact($n-1);
  6. }

A tuto knihovnu můžeme normálně uložit do souboru s extenzí .php.js a vložit jak do JS tak do PHP :-).

Pro zkoušku si uděláme dvě aplikace na kterých to vyzkoušíme.

Javascriptová verze

Javascriptová aplikace je úplně primitivní, běžná HTML struktura obsahují INPUT (identifikovaný přes id) a DIV pro výsledek (zase identifikovaný přes id). Dále je tlačítko pro uskutečnění výpočtu (JS funkce navázaná přes onClick) a pak už je jen vložení naší CombiScriptové knihovny pro výpočet faktoriálu a funkce, která po spuštění tlačítka zjistí zadanou hodnotu a výsledek zapíše do stránky.


  
  1. <!doctype html>
  2. <HTML lang="cs">
  3. <HEAD>
  4. <META charset="UTF-8">
  5. <META name="viewport" content="width=device-width">
  6. <TITLE>Funkce faktorial</TITLE>
  7. </HEAD>
  8. <BODY style="text-align:center">
  9. <INPUT id=argument>
  10. <INPUT type=button value="Spocti faktorial" onclick="Spocti()">
  11. <DIV id=Vysledek></DIV>
  12. <SCRIPT src="./my_lib.php.js"></SCRIPT>
  13. <SCRIPT>
  14. function Spocti()
  15. {
  16. var value = document.getElementById("argument").value;
  17. document.getElementById("Vysledek").innerHTML = my_fact(value);
  18. }
  19. </SCRIPT>
  20. </BODY>
  21. </HTML>
  1. //<?php
  2. function my_fact($n)
  3. {
  4. if ($n<=1) return 1;
  5. return $n*my_fact($n-1);
  6. }

Zdrojové kódy a spustitelný příklad výpočtu faktoriálu v JS

PHP verze

V aplikaci, kde stejnou knihovnu vkládáme do PHP se zbývá zbavit odeslání komentáře //, který se pošle na výstup před <?php. Řešení je jednoduché, použijeme ob_ funkce, výstup odchytíme a zahodíme. Zbytek aplikace je opět zcela standardní formulář, přes name pojmenovaný input, který z $_GET odchytíme a předáme funkci faktoriál z inludované knihovny.

  
  1. <!doctype html>
  2. <HTML lang="cs">
  3. <HEAD>
  4. <META charset="UTF-8">
  5. <META name="viewport" content="width=device-width">
  6. <TITLE>Funkce faktorial</TITLE>
  7. </HEAD>
  8. <BODY style="text-align:center">
  9. <FORM method=GET>
  10. <INPUT name=argument value="<?= $_GET['argument'] ?>">
  11. <INPUT type=submit value="Spocti faktorial">
  12. </FORM>
  13. <?php
  14. ob_start();
  15. include_once('./my_lib.php.js');
  16. ob_end_clean();
  17. if ($_GET['argument']!==null)
  18. {
  19. echo my_fact($_GET['argument']);
  20. }
  21. ?>
  22. </BODY>
  23. </HTML>
  1. //<?php
  2. function my_fact($n)
  3. {
  4. if ($n<=1) return 1;
  5. return $n*my_fact($n-1);
  6. }

Zdrojové kódy a spustitelný příklad výpočtu faktoriálu v PHP používající stejnou knihovnu

První CombiScriptová knihovna

A toto je naše první CombiScriptová knihovna. Hrozně ošklivá a bez důležitých ošetření. Ale výpočet faktoriálu opravdu používá stejný soubor jak pro PHP tak pro JS. A pokud v něm uděláme nějakou změnu promítne se do obou aplikací.

Samozřejmě, že výpočet faktoriálu je jen příklad. Představte si nějakou mnohem složitější transformaci, kterou potřebujete napsat na serveru i na klientovi (třeba převod na QR kód). To určitě nechcete psát dvakrát. A přesně toto Vám Combiscript umožní.

A v příštím díle se dozvíme jak se obejít bez "ob_" funkcí. Zapojte svou kreativitu a zkuste na řešení přijít!

Předchozí   Následující