Jump to content
php.lv forumi

Novēlota mainīgo izpildīšana


Lynx

Recommended Posts

Kādu laiku izstrādāju pie dinamiskas lapas ar templeitiem un valodas mainīšanas sistēmu un iešāvās prātā iespējams uzlabojums, lai padarītu visu vienkāršāku un atbrīvotos no lieki includotiem valodas failiem.

 

Ir funkcija error($text, $back = FALSE) kurai tiek padoti 2 mainīgie, viens ar kļūdas aprakstu, otrs ar ceļu kur atgriezties atpakaļ. Ir iespējams padot funckijai mainīgo $l_error tā lai viņš izpildītos tikai pēc tam funkcijā, nevis uzreiz tiktu izpildīts un tad padots.

 

triviālā veidā izskatītos kopā šādi:

 

include('functions.php');

blabla kods

notiek kluuda ar tekstu 12, kods tiek apstadinats un izvadam kludas pazinojumu
{
error($l_error12);
}

iekš functions.php 
error($text, $back = FALSE)
{
include('languages/blaabla');

Te notiek visa tā mainīgo izpildīšana, mēs redzam ka $text ir padots kā mainīgais $l_error12. Atrodam šo mainīgo valodas failā un izvadam $text vietā $l_error12 saturu no valodas faila. Es meiģināju dažādi padot referenci &$, bet nevarēju palaist. Ir tas vispār iespējams?

echo $text;  
}

Kāda jēga no šī visa? Pagaidām ir tā, ka katrā lapā ir jainklūdo erroru.php valodas fails, pat ja kļūdas nenotiek. Ja dabūtu gatavu šādu variantu tad atbrīvotos lapa no vairākiem mainīgajiem ar daudz tekstu.

Link to comment
Share on other sites

Mainīgo $l_error12, kurš tiek padots funkcijai error(); Jo pirms funkcijas izsaukšanas $l_error12 nav definēts, visus erorus ir plānots nodefinēt tikai iekšā funkcijā, kurā tiek izsaukts vajadzīgais valodas fails.

Link to comment
Share on other sites

A kāpēc tu negribi prosta ar masīvu, kurā sarakstīit tie teksti, darīties?

error("FILE_NOT_FOUND");

un tad tajā valodu failā uzdefinēt to:

$messages = array("FILE_NOT_FOUND" => "Fails nav atrasts", "XXX"=>"blah blah", ...);

Link to comment
Share on other sites

Teorētiski varētu, vienkārši vēlos pieturēties visā projektā pie vienotas sistēmas. Lapas augša tiek includoti valodu faili. Un vienkārši attīstot projektu uz priekšu radās ideja uztaisīt lapu tā, ka nav nekas lieks, piemēram, tagad visus error tekstus parnest uz atsevisku failu, kurš tiktu izsaukts, tikai kad nepieciešams. Nevis kā tagad visi viņi ir iekš common.php, kur glabaajas arī pārējie biežāk lietotie. Sanāk katru reizi laižot skriptu nēsāt līdzi kaudzi ar liekiem mainīgiem. Ātrumu jau tas praktiski neietekmē, bet kā pedantam gribās, lai viss būtu kārtībā :)

 

Hmm sanāk, ka tas nav iespējams? Izpētīju php.net manuāļus un neko līdzīgu neatradu. Iespējams, vienkārši es nezinu kā šo sauc.

Link to comment
Share on other sites

Ja tu tā pasaki, tad patiešām sāku saprast loģikas kļūdu. Nu teorētiski var jau nepadot tieši mainīgo, bet pēc nosaukuma padošanas mainīgo radīt(un tieši te es iesprūstu):

 

izsaucam ar: error('l_error12');

 

function error($code)

{

include('valodas fails');

echo ${$code}; // ši rinda, protams, nestradaa, bet doma aptuveni skaidra. Izpildīt mainīgo, pēc tam kad mainīgais ir izveidots.

}

 

Kaut gan izskatās, ka šī mana mirkļa ideja aiziet dziļās auzās, un pietiks niekoties. Palieku pie vecās sistēmas.

Link to comment
Share on other sites

Mainīgo, kurš nav definēts, vēlāk izpildīt gan nevar - viņa tak pēc būtības nav. Bet lai includotu kļūdu tekstus tik tad, kad kļūdas reāli ir bijušas, var darīt tā. Kļūdu tekstu failā saraksti tos tekstus masīvā ar kādiem kodiem kā atslēgām. Kad notiek kļūda, izsauc to error funkciju, inklūdo tekstu failu, un pēc koda izņem no masīva tekstu. Tipa:

if(! kaut kas,kas var dot kļūdu) {
 print_error('001');
}
function print_error($code) {
 include('errors_lv.php');
 echo $errors[$code];
}

Lai apstrādātu vienu reizi visas kļūdas, var uztaisīt kādu masīvu, kur tos kodus liec iekšā, un beigās pārbaudīt, vai tur kas ir. Ja ir, tad izsaukt to print_error($errors), iziet to masīvu ar kodiem un izvadīt visas kļūdas

 

Un kāpēc nestrādā. Man it kā strādā

print_error('err');

function print_error($code) {
$err = 'Mana kluda';
echo ${$code};
}

p.s. php5

Edited by john.brown
Link to comment
Share on other sites

Heh un tagad patiešām strādā. Izskatās, ka vienkārši 1o reizi rakstot kļūdijos mainīgos neuzrakstot vienādi. Un tā kā biju pieradis pie tā, ka nestrādā eksperimenti, pieļāvu, ka te arī vienkārši nebija tā paredzēts strādāt. Paldies visiem kuri palīdzēja tikt līdz gala risinājumam.

Link to comment
Share on other sites

×
×
  • Create New...