Esmalt tuleks meeles pidada, et ei echo ega include ole funktsioonid. Kui keegi räägib echo funktsioonist, siis see on sisuliselt väär. include korral võib siiski teda kasutadad ka kui funktsiooni, sest kui include õnnestus, antakse tagasi väärtus true, vastasel juhul false.
echo
Selle tegevuse juures tahaks vaid mainida ühte asja: jutumärkide kasutamisel parsitakse väljastatav lause, ülakomade korral mitte.
<?php
$muutuja = 'üks asi';
echo "Mina olen $muutuja"; // Tulemus: Mina olen üks asi
echo 'Mina olen $muutuja'; // Tulemus: Mina olen $muutuja
echo 'Mina olen '.$muutuja; // Tulemus: Mina olen üks asi
?>
Esimene ja kolmas variant annavad sisuliselt identse tulemuse, kuid kuna kolmanda variandi korral tulemust ei parsita, siis on väljund veidike ka kiirem. Missioonikriitilstes ja suuremahulistes ning hulgaliselt üheaegsete pöördumistega lehtede korral on see väikegi ajavõit tihti väga oluline.
include
Minu isiklik seisukoht on, et mitte-PHP failide kuvamiseks nende väljakutsumine include abil on ressursi raiskamine. Sest include on mõeldud PHP skriptifailide lisamiseks, teostades nende sisu parsimiseks ja vastavalt siis ka funktsionaalsuse lisamiseks.
Seega, kes kasutab include võtmesõna HTML failide sisselugemiseks raiskab liialt ressurssi. include asemel võib kasutada järgmisi korrektseid võimalusi:
- file - funktsioon, mis loeb faili massiivi, iga rida on eraldi massiivi element (algab 0 elemendist)
- readfile - funktsioon, mida võikski kasutada include asemel; loeb faili sisu ja väljastab selle brauserisse
- file_get_contents - loeb faili sisu ühte muutujasse (ehk siis kogu tekst on ühes string-tüüpi muutujas)
Põhiline, kui me loeme mingit PHP rakendust sisse ja tegu pole spagett-include'ga, siis seal on sees funktsioonide ja/või klasside definitsioonid. Kuna aga neid definitsioone tohib olla vaid üks, siis peab kontrollima, et include toimiks vaid üks kord. Võib kirjutada konrolli või kasutada võtmesõna include_once. Sellisel juhul loetakse fail vaid korra ilma, et peaks rohkem kontrollima. Minu mäletamist viisi algsetes PHP versioonides seda võimalust ei olnud, kuid ma võin ka eksida ja see võis mu enda rumalus olla, et ma seda ei teadnud.
Standardis on olemas ka võtmesõnad require ja require_once, kuid kuna need annavad Fatal error-it, kui faile ei ole, siis ma neid ei kasuta. Faili olemasolu peaks ikka enne include-t olema. Siin üks väike funktsioon, mida ma ise include tegemisel kasutan:
function Inc($file, $once = 1, $nolog = 0, $required = 0)
{
if (!@file_exists($file))
{
if (defined('LOCALPATH'))
$file = RELPATH . 'o/' . LOCALPATH . $file;
if (!file_exists($file))
return;
}
if (!is_file($file))
return;
if ($once)
{
if ($required)
require_once $file;
else
return include_once $file;
}
else
{
if ($required)
require $file;
else
return include $file;
}
}
fopen
Funktsioon fopen võimaldab täielikku kontrolli failide üle, lugeda, kirjutada ja lisada. Siin tuleks ehk ainult rõhutada seda, et faili avamine võib ebaõnnestuda ja siis tuleb ka vastavalt käituda. Ehk siis:
<?php
$file = fopen('myfile', 'r');
if (!$file) echo 'Faili ei saanud avada';
else
{
// tee failiga midagi
fclose($file);
}
?>
ja peaks ka faili sulgema. Siin on muidugi selline asi, et PHP sulgeb ise skripti lõppedes avatud failid, kuid kui teil läheb vahepeal sama faili vaja, siis sulgemata failiga võib see ebaõnnestuda.