thesnarkie Posted February 27, 2010 Report Share Posted February 27, 2010 (edited) <? class adminTool { private $db = array(); public function __construct() { $this->db["db_username"] = "x"; $this->db["database"] = "x"; $this->db["db_password"] = "x"; $this->db["hostname"] = "x"; $this->db["connected"] = false; $this->db["result"] = ""; } private function open() { if($this->db["connected"] != true) { $this->db["connection"] = @mysql_connect($this->db["hostname"], $this->db["db_username"], $this->db["db_password"]); mysql_select_db($this->db["database"]); $this->db["connected"] = true; } } public function run($sql) { if(!empty($sql)) { if($this->db["connected"] != true) { $this->open(); } $this->db["result"] = @mysql_query($sql); return $this->db["result"]; mysql_free_result($this->db["result"]); if($this->db["connected"] != false) { $this->close(); } }else{ return false; } } public function fetch($result) { if(!empty($result)) { $this->db["result"] = mysql_fetch_assoc($result); return $this->db["result"]; mysql_free_result($this->db["result"]); }else { return false; } } private function close() { if($this->db["connected"] != false) { mysql_close($this->db["connection"]); $this->db["connected"] = false; } } } $me = new adminTool(); $result = $me->run("SELECT * FROM account AS a ORDER BY a.id DESC LIMIT 0, 100"); while($row = mysql_fetch_assoc($result)) echo $row["username"] ." => ".$row["password"] ."<br />"; ?> Domāju iemācīties kā rīkoties ar class lietām. Vai augstāk dotais kods ir gana labs, lai savienotos ar datubāzi un palaistu query? Un vispār vai augstāk dotais ir ātrāks, drošāks vai jeb kā citādāk labaks kā šis zemāk? Kāda vispār atšķirība? Ko augstāk dotajā kodā varētu uzlabot? <? $db_username = "x"; $database = "x"; $db_password = "x"; $hostname = "x"; $db = mysql_connect($hostname, $db_username, $db_password); mysql_select_db($database); $run = mysql_query("SELECT * FROM account AS a ORDER BY a.id DESC LIMIT 0, 100"); while($row = mysql_fetch_assoc($run)) { echo $row["username"] ." => ".$row["password"] ."<br />"; } mysql_free_result($run); ?> Edited February 27, 2010 by thesnarkie Quote Link to comment Share on other sites More sharing options...
daGrevis Posted February 27, 2010 Report Share Posted February 27, 2010 Klases nav ātrākas, bet ja projekts būs liels, un to izstrādās daudz web dev'i, tad ar klasēm būs daudz, daudz vieglāk. :) Quote Link to comment Share on other sites More sharing options...
thesnarkie Posted February 27, 2010 Author Report Share Posted February 27, 2010 Bet lēnākas arī nav? Quote Link to comment Share on other sites More sharing options...
Delfins Posted February 27, 2010 Report Share Posted February 27, 2010 nokešo ar mmcache, tik pat kā nejutīsi starpību. par drošumu - labāk, ja ir laba klase, kas apstrāda visus errorus, injekcijas un t.t. Quote Link to comment Share on other sites More sharing options...
thesnarkie Posted February 27, 2010 Author Report Share Posted February 27, 2010 Ieliku gala variantu connector classei. Kaut ko pielikt vai atņemt? Quote Link to comment Share on other sites More sharing options...
daGrevis Posted February 28, 2010 Report Share Posted February 28, 2010 Ev, jautājums. :D Ja klasē raksta "public function" vai vienkārši "function", kas mainīsies? :) Quote Link to comment Share on other sites More sharing options...
waplet Posted February 28, 2010 Report Share Posted February 28, 2010 ja vienkārši raksta, tad ja nemaldos funkcijas bija static,. bet publiski tas ir tā, ka pirms klases itkā inicializēšanas tu jau vari palaist funkcijas ārpus klases.. .. a statiskās un protected, tikai klases ietvaros. Palabojiet ja kļūdos. Quote Link to comment Share on other sites More sharing options...
2easy Posted February 28, 2010 Report Share Posted February 28, 2010 waplet labāk neraksti :D:D:D Quote Link to comment Share on other sites More sharing options...
daGrevis Posted February 28, 2010 Report Share Posted February 28, 2010 2easy, paskaidro Tu! :) Quote Link to comment Share on other sites More sharing options...
briedis Posted February 28, 2010 Report Share Posted February 28, 2010 (edited) figviņzin, kas ja neraksta. Bet ja raksta public, tad metodei/mainīgajam ir pieejams "no visurienes" :D Ja metode/mainīgais ir private, tad metodei/mainīgajam var piekļūt tikai pati klase. Ja metode/mainīgais ir protected, tad metodei/mainīgajam var piekļūt pati klase un klase, kas to manto. Static vispār nozīmē, ka tas visos klases instancēs būs vienāds. Piemēram, statisks mainīgais visās klases instancēs vienmēr būs vienāds (pamainīsi vienā instancē, citā tās pašas klases instancē arī pamainīsies) Edited February 28, 2010 by briedis Quote Link to comment Share on other sites More sharing options...
2easy Posted February 28, 2010 Report Share Posted February 28, 2010 (edited) 2easy, paskaidro Tu! :) piekrītu briedim ^^ hmm, tomēr mazliet nepiekrītu. statiskās metodes izsauc uzreiz pašai klasei, nevis instancei ;) labi, nav ko daudz pīpēt, vajag uzrakstīt class C { static function testStatic() {echo 'static<br />';} function test() {echo 'test<br />';} public function testPublic() {echo 'public<br />';} private function testPrivate() {echo 'private<br />';} protected function testProtected() {echo 'protected<br />';} } C::testStatic(); // static C::test(); // test (imho, normālā oop šim vajadzēja fail) C::testPublic(); // public (imho, normālā oop šim vajadzēja fail) $o = new C(); $o->testStatic(); // static (imho, normālā oop šim vajadzēja fail) $o->test(); // test $o->testPublic(); // public $o->testPrivate(); // Fatal error: Call to private method C::testPrivate() $o->testProtected(); // Fatal error: Call to protected method C::testProtected() kr4 tgd skaidri ir redzams, ka metode "bez nekā" nozīmē to pašu ko public. un jā, php tomēr atļauj statiskās metodes izsaukt arī instancei. UPDATE: hmm, mazliet papildinot testu, atklājās ka arī test() un testPublic() var izsaukt kā statiskās metodes!!! tb php ir pārāk elastīgs/vaļīgs attiecībā uz oop. tad jau man būtu jāsaka nevis "tomēr mazliet nepiekrītu briedim", bet gan "tomēr mazliet nepiekrītu php oop implementācijai", par to ka atļauj par daudz! :D vsp daGrevis vajag lasīt manuāli. tur viss ir uzrakstīts ;) Methods without any declaration are defined as public. Edited February 28, 2010 by 2easy Quote Link to comment Share on other sites More sharing options...
2easy Posted February 28, 2010 Report Share Posted February 28, 2010 (edited) attiecībā uz pašu db konektoru, nju Jūs gan protat sarežģīt vnkāršas lietas. visu to pašu var izdarīt ar daudz mazāku procedurālu kodu. piemēram, šeit php.lv piemērus bliežu ar šādām funkcijām function dbconn($sSrv, $sDb, $sUsr, $sPw) { // inicializē mysql connection @mysql_connect($sSrv, $sUsr, $sPw) or exit('<b>mysql_connect() error ' . mysql_errno() . ':</b> ' . mysql_error()); mysql_select_db($sDb) or exit('<b>mysql_select_db() error ' . mysql_errno() . ':</b> ' . mysql_error()); go('SET NAMES utf8'); } function go($sSql) { // izpilda mysql query $h = mysql_query($sSql) or exit('<b>mysql_query() error ' . mysql_errno() . ':</b> ' . mysql_error() . '<br /><b>query:</b> ' . substr($sSql, 0, 1000)); return $h; } function qi($i) {return is_null($i) ? 'NULL' : preg_replace('/[^\d-]/', '', $i);} // query int64 - sagatavo lielu veselu skaitli (int64) ievietošanai mysql query function qn($n) {return is_null($n) ? 'NULL' : (float) $n;} // query num - sagatavo skaitli (int/float) ievietošanai mysql query function qs($s) {return is_null($s) ? 'NULL' : "'" . mysql_real_escape_string($s) . "'";} // query str - sagatavo tekstu (any string) ievietošanai mysql query un nekādu problēmu http://php.lv/f/topic/15731-mysql-kverijs/page__view__findpost__p__121717 http://php.lv/f/topic/15781-mysql-vaicajums/page__view__findpost__p__122190 tas ka prot oop, tas ir labi, bet tas jau nenozīmē, ka tūlīt viss ir jākodē ar oop nē, nu tā, protams, var darīt, ja patīk :)) gaumes lieta kā nekā. taču procedurāli ir ātrāk ;) kr4, vispirms use brain, then oop Edited February 28, 2010 by 2easy Quote Link to comment Share on other sites More sharing options...
rATRIJS Posted February 28, 2010 Report Share Posted February 28, 2010 Un vispār veidot savu DB klasi ir diezgan lieki, jo ir šāda lieta: MySQLi Quote Link to comment Share on other sites More sharing options...
2easy Posted February 28, 2010 Report Share Posted February 28, 2010 (edited) no MySQLi Overview APIs can be procedural or object-oriented. With a procedural API you call functions to carry out tasks, with the object-oriented API you instantiate classes and then call methods on the resulting objects. Of the two the latter is usually the preferred interface, as it is more modern and leads to better organised code. visvairāk man patīk spēcīgais pamatojums: tipa modernāks :D:D:D par koda organizēšanu vēl ok, lai gan tas ir stipri atkarīgs no paša programmētāja, jo klases/objektus arī var tā saorganizēt, ka maz neliksies :P bezmaz nākas secināt, ka oop ir priekš iesācējiem, lai palīdzētu viņiem organizēt kodu!!! yeee :D:D:D kr4 priekš tiem, kam ar to ir grūtības, uzliek visādus ierobežojumus jau pašā programmēšanas valodā un tādējādi piespiež kļūt organizētākiem. tāpēc jau notiek visa tā beztolka pašmenedžēšanās ar public/private/protected/etc, lai tikai kāds noobs "netīšām" nevarētu izdarīt kko ne tā :P Edited February 28, 2010 by 2easy Quote Link to comment Share on other sites More sharing options...
thesnarkie Posted February 28, 2010 Author Report Share Posted February 28, 2010 (edited) @rATRIJS - paldies. izmantošu obligāti! :) vispār man ir vienalga vai tā ir modernāk vai nav. :D man svarīgi ir lai kods būtu drošs un ātrs, tāpēc nolēmu pamēģināt klases. firebug'ā salīdzinot viena koda ātrumu ar otra ātrumu nekādas atšķirības nav. par drošību nezinu. secinājums - izmantošu db klasi, lai būtu gana "moderns", bet tas arī viss no klasēm. laikam. Edited February 28, 2010 by thesnarkie Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.