Jump to content
php.lv forumi

john.brown

Reģistrētie lietotāji
  • Posts

    510
  • Joined

  • Last visited

Posts posted by john.brown

  1. Ja viņš defaultā ir izslēgts, tad nav nekādas garantijas, ka labais sisadmins viņu būs ieslēdzis :)

     

    2Venom

    Vai tad galīgi nekā nav ko teikt par to klassīti http://paste.php.lv/1367?

    It kā būtu pārrakstīta vispārējos vilcienos. Gribu vēl order funkciju pielikt.

    Te ir uz ātru roku lietošanas pimērs: lietošana

  2. This variable will only be available within the scope in which the error occurred, and only if the track_errors configuration option is turned on (it defaults to off).

    Ar to rēķināties diez vai var :)

  3. man liekas ka nav iisti korekti taisiit die funkciju viduu

    Strīdīgs jautājums. Pirmajā brīdī tā liekas. Bet :

     

    1) vai ir jēga izpildīt tālāk kodu, ja nav atvēries fails?

     

    2) lai jēdzīgi un smuki izvestu kļūdas beigās no mainīgās, jāekranē paša php ziņojumi (@fopen($file,"w")), bet tad no tām kļūdām ir maz jēgas - es pats varu max uzrakstīt "Nevaru avert failu $file", bet kāpēc nevaru, to tā arī neuzzināšu. Ja pareizi saprotu, iekš php nav mainīgā, kurā viņš pats ievietotu savus kļūdu ziņojumus (analogu Perla $@ vai $!).

     

    3) PHP manuālī par OOP viņi paši piemēros taisa funkcijas vidū die() :)

     

    Tās bāzītes pārrakstīšanas sākums varētu būt apmēram šitāds: http://paste.php.lv/1359

     

    Varbūt tā būs interesantāk pakomentēt?

  4. Vienā no maniem iepriekšējim postiem :)

    Kods ir šeit: MICROdb

    Sen gribēju viņu pārrakstīt.

    Skaidrs, ka pilnīgi jāpārtaisa darbības ar failiem - viņi ir jākešo. Pašlaik viņa galīgi navajadzīgi tos virina. Arī datu meklēšanu noteikti var effektīvaku uztaisīt.

  5. Ko pielabot vienmēr var atrast :) Manā gadījumā gan biežāk sanāk tā, ka uzrakstu classīti, novedu līdz dzīvīgam izskatam uz to brīdi, un vairs bez galējas nepieciešamības tur iekšā nelienu - laika vienmēr trūkst :(

    Bet tāda publiska koda iztirzāšana veicina radošo domu :) Šinī sakarā, varbūt varētu arī pieminēto txt datubāzīti apspriest - vai nu šinī, vai jaunā tredā?

  6. 2Venom

    return $this->contents=str_replace(array_keys($tags),array_values($tags),$this->contents);

     

    Pēdējā rindiņa laikam loģiskāka būtu šitāda:

    return str_replace(array_keys($this->tags),array_values($this->tags),$this->contents);

    Rezultāta Parse varētu būt šāda ,saglabājot iespēju apstrādāt rindas. Tiesa, ari ne galīgā versija

    <?php
    class Parse {
           var $file;
           var $contents;
           var $tags;
    
    function Parse($file = '',$mode = 0,$tags = array())  {
            static $tpl = array();
            if ($tags) $this->tags = $tags;
            if ($file) {
               $this->file = $file;
               if(!isset($tpl[$file])) {
               	if(!$mode) {
                   	$tpl[$file] = join('',file($this->file));
                   	$this->contents = $tpl[$file];
                   }
                   else {
                   	$tpl[$file] = 1; $this->contents = $file;
                   }
               }
            }
            return $this->contents;
    }
    function replace($tags = array(),$file = '',$mode = 0) {
            if ($file && $file != $this->file) $this->Parse($file,$mode);
            if ($tags) $this->tags = $tags;
            return str_replace(array_keys($this->tags),array_values($this->tags),$this->contents);
    }
    }
    
    ?>

    Tad ir iespēja lietot šādus variantus:

    $data = array('%%vards%%' => 'John','%%uzvards%%' => 'Brown');
    
    $prs = new Parse('template.html',0,$data);
    
    echo $prs->replace();
    
    echo $prs->replace($data,'template1.html');
    
    $data = array('%%vards%%' => 'Huan','%%uzvards%%' => 'Kaktus');
    
    echo $prs->replace($data);
    
    echo $prs->replace('','template.html');
    
    $data = array('%%vards%%' => 'Sancho','%%uzvards%%' => 'Gonzales');
    
    echo $prs->replace($data,'<br><b>%%vards%% %%uzvards%%</b>',1);

  7. Funkcija setValue() tika radita tikai paša ērtībām - tā lasāmāks kods iznāk (IMHO).

    "Liekais" if..else nes konkrētu slodzi - ja $mode == 0 - parsējam failu, ja $mode == 1 - parsejam $this->file kā rindu. Piekrītu, ka nav gluži korekti, bet reizēm ir tāda vajadzība :)

    Izmantot asociatīvo massīvu acīm redzot ir saprātīgak. Vienkārši man nekad nav bijis vairāk par ~5-10 tagiem templatēs - tur saputroties ir grūti. Man patīk kaut kas līdzīgs:

    $prs->setValue(array('%%TITLE%%','%%TOOLS%%','%%MSG%%','%%LEFT_HTMLOUT%%','%%RIGHT_HTMLOUT%%','%%SCRIPT%%','%%CHARSET%%'),array($title,$tools,$msg,$left_htmlout,$right_htmlout,$script,$charset));

    Tas arī ir perl mantojums - nemīlu maisīt kodu ar HTMLu. Bet paldies par uzlabojumiem :)

    Semantiski jau labu laiku rakstu function ar mazo burtu (piedāvatai kods bija pavecs), tiesa, vēl jo projām Class - bet labošos :rolleyes:

    saprātiskas: redzot $this->file drīzāk rodas asociācijas ar $this->filename. Prasās $this->contents vai tml.
    Pavisam pareizi būtu: $this->template_file_content. Esmu sastapis tikai vienreiz tik pareizi uzrakstītu kodu ar ļoti sīku un apdomātu mainīgo nosaukumiem. Vairumam, tai skaitā arī man, nepietiek pacietības tik gari rakstīt :) Bet tas, protams, nav labi un pareizi.

     

    file_get_contents() nelīdz?

    Līdzēs vai nē būs atkarīgs no PHP versijas.

    Un programmējot ar funkcijām tas nenotiek?

    Notiek, protams. Saprāta robežās :)

  8. Var visādi. Cik koderu, tik variantu, kā to realizēt. Runa gāja ne par to, kā izmantot templates vai kā ātrāk nolasīt failu, bet par OOP lietderību PHP.

    Konkrētais piemērs tika pievienots īsuma dēļ - diez vai kādam būtu labums, ja es te ievietotu, piemēram, txt datubāzes objektu ar pāris simtiem rindu koda.

    Es guvu labumu no šīs diskusijas, t.k. pārskatīju kodu, kuru tiku rakstījis savas PHP kodešanas sākumā pa taisno pārkodējot no Perl.

    Galvenais dotajā gadījumā ir tas, ka ne tikai var, bet arī vajag lietot OOP, vēl jo vairāk tas iekš PHP ir realizējams daudz vienkāršāk, nekā, piemēram, iekš Perl.

  9. un es saprastu, a būtu vismaz im modifikatori (//im) bet še tev!

    dotajā gadījumā nav nepieciešamības pēc //im modifikatoriem, kaut arī leitot viņus varēja. Nedomāju, ka tas ļoti saīsinātu vai uzlabotu kodu. //i pilnīgi noteikti nē, jo var būt gadījums, kad tev ir %%vards%% un %%VARDS%% - tie tomēr ir dažādi tagi :)

    lietojot //m būtu jātaisa

    $fh = fopen($file,'r');
    $tpl = fread($fh,filesize($file));
    fclose($fh);

    manā saprašanā, tas ir pārak gari un sarežgīti :)

     

    Inklūdojam templeitu (pašās koda beigās). Un nav nepieciešama šāda templeitu sistēma nevienā acī.

    Dizainerim un vēl jo vairāk lietotājam bieži nav ērti strādāt ar tagiem, kurus viņš neredz gatavā dizainā. <?=$vards ?> ir ērti tikai ja pats taisi templeitu, dizainerim ērtāk ir %%vards%%.

     

    str_replace() pilnīgi noteikti varēja, tas man ir no smaga Perl mantojuma :)

     

    Labi, lai nebūtu pretenziju Parse.inc

    <?
    Class Parse {
    
    var $tags;
    var $values;
    var $file;
    
    Function Parse($file) {
           $this->file = $file;
    }
    Function setValue($tags,$values) {
            $this->tags = $tags;
            $this->values = $values;
    }
    Function replace($mode) {
            if(!$mode) {
               $tpl = file($this->file);
               $tpl = join(' ',$tpl);
            }
            else {
               $tpl = $this->file;
            }
            return str_replace($this->tags,$this->values,$tpl);
    }
    
    }
    
    ?>

    Vērtīgi tomēr ir reizēm ieskatītie savos vecajos kodos. Vel viens arguments par labu OOP - arī jaunā Parse.inc redakcija strādās vacajos skriptos :D

  10. Veltīgi te daži izsakās tik noliedzoši par objektu lietošanu PHP. Ja jums jāraksta liels projekts, tad labot bagus, kā arī nākotnē izmainīt funkcionalitāti ir daudz vienkāršāk ar objektiem, nekā ložņāt pa visu kodu. Otrkārt, ir daudz lietu, kuras atkārtojas no projekta uz projektu (piemēram, templašu lietošana :D ). Vienreiz uzrakstījuši objektu, jūs varat viņu lietot visos nākamajos projektos, ievērojami sev atvieglojot dzīvi :)

    Kā piemērs:

    <?
    include("Parse.inc");
    
    $prs = new Parse("template.html");
    
    $prs->setValue(array('%%vards%%','%%uzvards%%','%%vecums%%','%%mails%%','%%adrese%%','%%telefons%%'),array($vards,$uzvards,$vecums,$mails,$adrese,$telefons));
    echo $prs->replace(0);
    ?>

    Un Parse.inc:

    <?
    Class Parse {
    
    var $tags = array();
    var $file;
    
    Function Parse($file) {
           $this->file = $file;
    }
    Function setValue($tags,$values) {
            if(is_array($tags)) {
               for($i = 0;$i < sizeof($tags); $i++) {
                   $this->tags[$tags[$i]] = $values[$i];
               }
            }
            else {
                  $this->tags[$tags] = $values;
            }
    }
    Function replace($mode) {
            if(!$mode) {
               $tpl = file($this->file);
               $tpl = join(' ',$tpl);
            }
            else {
               $tpl = $this->file;
            }
            $tags = $this->tags;
            $search = array();
            $replace = array();
    
            while(list($key,$val) = each($tags)) {
                  array_push($search,'/'.$key.'/');
                  array_push($replace,$val);
            }
            return preg_replace($search,$replace,$tpl);
    }
    
    }
    
    ?>

    Un šis failiņš Parse.inc man jau vairākus gadus ceļo no projekta uz projektu :P

×
×
  • Create New...