Jump to content
php.lv forumi

Problēma!


!Crj.

Recommended Posts

man liekas ka nav iisti korekti taisiit die funkciju viduu, bet labaak izvadiit false. es parasti nodefineeju klases mainiigo error, kur tiek iemests kljuudas paskaidruojums un pirms false ieraksta kas bija pa kljuudu.

Link to comment
Share on other sites

  • Replies 59
  • Created
  • Last Reply

Top Posters In This Topic

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?

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

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

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

Uzrakstīju orderBy() funkciju, un it kā pat strādā. Bet man nez kāpēc liekas, ka īsti smuka viņa nav, tik nekādi nevaru saštukot, kā to jēdzīgāk izdarīt. Liekas, ka array_multisort() varētu līdzēt kaut kā... Varbūt kāds ko ieteiks?

function orderBy($colname,$order = 'ASC',$type = SORT_REGULAR) {
     $sortarr = array();

     for($i = 0;$i < count($this->result);$i++) $sortarr[$i] = $this->result[$i][$colname];

     if($order == 'ASC') asort($sortarr,$type);
     if($order == 'DESC') arsort($sortarr,$type);

     $sorted = array();
     foreach(array_keys($sortarr) as $key) $sorted[] = $this->result[$key];

     return $this->result = $sorted;
}

Link to comment
Share on other sites

klasi pārāk gari skatīties, kad vēl darbs nedarīts stāv ;) + kaučkādi gatavie varianti laikam ir (Sqlite?)

 

no redzēta orderBy:

forā count() nevajadzētu izmantot, it īpaši, ja masīva var būt tūkstošiem elementu (nosacījums tiek novērtēts, lasi - count tiek pārrēķināts pie katra for cikla), + tad, kad jāizskrien masīvs, vienmēr labāk būtu izmantot predekrementu - --$i (n.b. šajā gadījumā arī inkrementu būtu jāizmanto ar "pre" - ++$i), resp.

$tmp=count($this->result);

while(--$tmp>-1)

$sortarr[$i]=$this->result[$i][$colname];

 

un atkal jau foreach(array_keys() ... ) izskatās ļoti aizdomīgi - tā, it kā array_keys() tiktu izsaukts pie katra caurgājiena

 

if ($order=='ASC')

else ..., ja vien nedomā izmantot kādu citu orderēšanas veidu

 

multisortā laikam gan derētu ieskatīties.

Link to comment
Share on other sites

Paldies, par to count() netiku padomājis :)

Nu vo, palaboju un vēl piebēru funkcionalitāti :) Būs laiks, paskaties, plz. Tavi padomi ir ļoti vērtīgi.

Te ir svaigais variants: http://paste.php.lv/1369

A te lietošana:http://paste.php.lv/1370

 

Multisortā tiku ieskatījies ne reizi vien, bet, godīgi sakot, neko vairāk par neskaidru nojausmu, ka tas ir tas, ko vajag, neguvu - manualī viņi assoc. massīvus vispār neapskata :( Varbūt pastulbs esmu... Kā sazortēt assoc. massīvu massīvu pēs viena no elementiem paliek pilnīgi nesaprotams.

Link to comment
Share on other sites

Tā uz ātro ieskatījos:

 

function set_err($mess = '') {

$this->errors[]=$mess;

//nav ko lieki izsaukt funkcijas, kur var iztikt ar operatoru

return false;

}

 

tad

$this->set_err('whateva'); return false

vietā var rakstīt uzreiz return $this->set_err('whateva');

 

un arī "Can not create table \"$database\"!" vieglāk un labāk rakstīt 'can not ...'.$database.'!'

 

hints1: tā kā varētu būt, ka bieži tiek rakstīts failā, tad derētu nevis uzticēties lockiem (kuru winos nav, bet rakstīt no sākuma temp failā un pēc tam pārlikt to par vajadzīgo)

 

hints2: tā kā tik un tā streso RAMu ar faila lasīšanu un explodēšanu - varbūt uzreiz apskaties serialise/unserialise f-jas?

 

iekš php, ja masīvs ir tukšs tad if(masīvs) arī atgriešz false, resp.

 

if(!count($this->errors)) { return false; }

#192 $err = $this->errors;

#193 $this->errors = array();

#194 return $err;

 

var pārrakstīt kā

$tmp=$this->errors;

$this->errors=array();

return $tmp;

 

NB: foreach($data as $d) {

foreach(array_keys($d) as $key) echo $key.' => '.$d[$key].'<br>';

vietā lieto

print '<pre>'.print_r($data,1).'</pre>'; iekš VenPad-a snippets "chk"

Link to comment
Share on other sites

Jā, ar error funkcijām drusku pārcentos :) Viņas gan man tur tāpat ir bērnudārza līmenī. Līdz pilnvērtīgai kļūdu apstrādei rakstīt un rakstīt...

 

Serialize/unserialize funkcijas es tiku meģinājis izmantot vienā citā projektā, bet nonācu pie secinājuma, ka strādā viņas tomēr lēnāk par explode/implode. Ar vienu vārdu sakot, atteicos no viņām neskatoties uz acīm redzamām lietošanas ērtībām kodā.

 

Par lokiem. Zinu, ka winos viņu nav, bet php jau parasti tomēr strādā Unix/Linux sistēmās, un tur tie tomēr ir diezgan droši (IMHO). Taču temp fails droši vien paaugstinās datu drošību. Laikam tā arī darīšu...

 

Paldies par komentāru. Ja Vēl ko ievērības cienīgu pamanīsi, būšu pateicīgs :)

 

p.s. Jā, ar <pre></pre> print_r izskatās stipri cilvēcīgāk :D

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

  • 2 years later...

The best place there, as far as I remember, was somewhere in conf directory. Maybe it was httpd.conf, maybe srm.conf, I don't remember. But italian index in htdocs directory was also cool. Oh, and don't forget to RewriteURL, otherwise it's too hot. And if you have PHP installed on, change the configuration of GD library, you know, turn it on. That makes it prettier if you have images :)

Link to comment
Share on other sites


×
×
  • Create New...