Hinnavaatlus
:: Foorum
:: Uudised
:: Ärifoorumid
:: HV F1 ennustusvõistlus
:: Pangalink
:: Telekavad
:: HV toote otsing
|
|
autor |
|
keevitaja
AM 10 aastat

liitunud: 05.11.2001
|
29.04.2010 21:54:12
|
|
|
no zend framework lihtsalt andmebaasiga suhtlemiseks vist oleks liiast... kui sa nüüd seda mõtlesid
_________________ Hinnavaatlus ei ole koht arvamuse avaldamiseks! |
|
Kommentaarid: 51 loe/lisa |
Kasutajad arvavad: |
   |
:: |
1 :: |
3 :: |
40 |
|
tagasi üles |
|
 |
iceincube
HV veteran

liitunud: 18.11.2005
|
29.04.2010 22:46:11
|
|
|
eks ta mõnes mõttes õige ole..
Ma toon sulle näite, kui tahad proovida...
//config fail
$dbCongig = array(
'adapter' => 'Pdo_Mysql',
'logindata' => array(
'host' => 'localhost',
'username' => '',
'password' => '',
'dbname' => ''
),
);
//bootstrap
set_include_path( '/usr/local/lib/ZendFramework/library' . PATH_SEPARATOR . get_include_path() );
require_once 'Zend/Db.php';
require_once 'Zend/Db/Table.php';
require_once 'Zend/Registry.php';
require_once 'Zend/Db/Table/Abstract.php';
$db = Zend_Db::factory($dbCongig['adapter'], $dbCongig['logindata']);
$db->query("SET NAMES 'utf8'");
Zend_Db_Table_Abstract::setDefaultAdapter($db);
//see osa kontrollerisse
$tTable = new Zend_Db_Table('minutabel'); //loome tabeli objekti
$data = array(
'date_inserted' => date('Y-m-d H:i:s')
);
$id = $tTable->insert( $data ); //sisestame uue rea
if($id){
echo 'inserted: ' . $id;
}
|
baasis peaks siis olema tabel nimega 'minutabel' väljaga 'date_inserted' ja mingi primary auto incremental key
viimati muutis iceincube 30.04.2010 00:49:51, muudetud 1 kord |
|
Kommentaarid: 39 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
37 |
|
tagasi üles |
|
 |
keevitaja
AM 10 aastat

liitunud: 05.11.2001
|
29.04.2010 23:28:57
|
|
|
ma kunagi midagi postitasin kah siia, aga hetkel olen kirjutanud selle klassi andmebaasiga suhtlemiseks:
php:
|
<?php class MysqlDB { private $link; function __construct() { $this->open_connection(); } public function open_connection() { if(@! $this-> link = mysql_connect(SQL_HOST, SQL_USER, SQL_PASS )) { } } public function query($query) { return $result; } else { $error_msg = 'Mysql fatal error: ' . mysql_error() . '<br>'; $error_msg .= 'Last query: ' . $query; } } public function fetch_array($result) { } public function fetch_assoc($result) { } private function sformat($arg_list) { foreach($arg_list as $arg) { $new_list[] = $this->escape_value($arg); } return $string; } public function squery() { return $this->query($query); } public function insert_id() { } public function affected_rows() { } public function num_rows($result) { } public function escape_value($value) { } public function count_rows_from_table($table) { $result = $this->query("select count(*) from " . $table); return $count; } } ?>
|
$id = 7;
$db = new MysqlDB;
$result = $db->squery("select name from tabel where id='%s'", $id); |
ehk kellelegi abiks...
_________________ Hinnavaatlus ei ole koht arvamuse avaldamiseks! |
|
Kommentaarid: 51 loe/lisa |
Kasutajad arvavad: |
   |
:: |
1 :: |
3 :: |
40 |
|
tagasi üles |
|
 |
morgoth
HV kasutaja

liitunud: 14.01.2004
|
30.04.2010 00:06:45
|
|
|
IMO DB klassil võiks ka mingi error handling olla. Hea kuskile logisse salvestada, kui midagi nihu läheb, või transaktsioonile rollbacki teha.
Zend_Db_Table abil annab suht hästi table data gateway patterni kasutada: Extendid oma klassi sellest ning pärast on väga mugav andmeid muuta/lisada:
$data = $this->createRow();
$data->username = 'username';
$data->save();
|
Suht win ju.
|
|
Kommentaarid: 11 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
10 |
|
tagasi üles |
|
 |
keevitaja
AM 10 aastat

liitunud: 05.11.2001
|
30.04.2010 01:08:47
|
|
|
mul endal selline süsteem tehtud. aga alates PHP 5.3 late static bindinguga... kus siis esimine klass sisaldab funktsioone, ja teine siis extendib teda kus ma kirjeldan ära siis tabeli nime ja vajadusel siis custom funktsioonid. saab samuti teha näiteks:
$page = Pages::find_by_id(4);
$page->name = 'uus nimi';
$page->save();
uus kanne oleks siis
$page = new Pages;
$page->save();
<?php
class Pages extends DatabaseObject {
protected static $table_name = DB_PAGES;
}
?> |
_________________ Hinnavaatlus ei ole koht arvamuse avaldamiseks! |
|
Kommentaarid: 51 loe/lisa |
Kasutajad arvavad: |
   |
:: |
1 :: |
3 :: |
40 |
|
tagasi üles |
|
 |
keevitaja
AM 10 aastat

liitunud: 05.11.2001
|
28.05.2010 10:13:36
|
|
|
kas keegi viitsiks mulle seletada, mis point on abstract classidel. ma siin vaatasin manuali, kuid ei saa pihta, miks neid vaja on...
_________________ Hinnavaatlus ei ole koht arvamuse avaldamiseks! |
|
Kommentaarid: 51 loe/lisa |
Kasutajad arvavad: |
   |
:: |
1 :: |
3 :: |
40 |
|
tagasi üles |
|
 |
Ho Ho
HV Guru

liitunud: 16.02.2002
|
28.05.2010 17:11:15
|
|
|
Kui üldised OO põhimõtted selged ei tohiks aru saamine väga keerukas olla, kui ei ole selged siis pole vist eriti mõtet isegi üritada selgitada.
Sisuliselt abstraktne klass on selline klass, mida otseselt kusagil ei kasutata, see on ette nähtud ainult extendimiseks teiste klasside poolt. A'la midagi sellises stiilis (pseudokood c++ baasil):
abstract class Shape {
Type type();
int numPoints();
};
class Triangle extends Shape {
Type type() {
return Type::Triangle;
}
int numPoints() {
return 3;
}
};
class Square extends Shape {
Type type() {
return Type::Square;
}
int numPoints() {
return 4;
}
}; |
Edaspidi kirjutad koodi, mis tegeleb kõiksugu kujunditega siis kasutad üldiste operatsioonide jaoks abstraktset baasklassi ning saad endiselt kasutada kõiki sellest tuletatud klasside funktsioone. Baasklassi ennast ei saa otse luua. Koos kompilaatori poolt tehtavate lisakontrollidega peaks see tagama, et kõik abstraktses klassis defineeritud funktsioonid on kõigis sellest tuletatud klassides implementeeritud.
Alternatiivselt võib abstraktseid klasse ka interface'ks kutsuda, kui mälu ei peta siis Javas seda tehaksegi.
_________________ Teach a man to reason and he'll think for a lifetime
Common sense - so rare that it's a damn superpower
Vaadates paljude inimeste sõnavõtte siin ja mujal jääb üle ainult klassikuid tsiteerida - "I weep for humanity" |
|
Kommentaarid: 106 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
1 :: |
86 |
|
tagasi üles |
|
 |
Fukiku
Kreisi kasutaja

liitunud: 06.11.2003
|
28.05.2010 17:45:39
|
|
|
Ho Ho kirjutas: |
Alternatiivselt võib abstraktseid klasse ka interface'ks kutsuda, kui mälu ei peta siis Javas seda tehaksegi. |
Päris nii lihtne see ei ole, Java kontekstis on olemas nii liidesed (interface) kui abstraktsed klassid. Liidesed defineerivad ära portsu meetodeid millele antud liidest realiseeriv klass peab andma sisu. Abstraktne klass on klass, milles on meetodeid, mis on realiseerimata (e. puudub sisu) ja vajavad alamklassis realiseerimist ning meetodid, mis on juba realiseeritud (sisu on olemas). Liides on seega mõistlik kasutada mingi klassi omaduste kirjeldamiseks ja jätta realisatsioon täielikult arendaja teha, abstraktne klass juhul, kui sa soovid osa klassi omadustest ise ära realiseerida ning osa jätta arendajale tegemiseks. Tegin ka mingi pisikese Java põhise näite, mis ehk aitab ka üldisemas plaanis pärilusest ja muust seonduvast aru saada. Loodud on siis liides Loom, abstraktne klass Imetaja, mis defineerib ära midagi, mis on kõigil imetajail ühine ning konkreetne klass Kass, mis realiseerib kõik nõutud meetodid et tagada Loom'ale vajalik käitumine.
java:
|
interface Loom { int leiaJalgadeArv(); boolean sööLoom(Loom ohver); boolean sööTaim(Taim ohver); } abstract class Imetaja implements Loom { // määrame sisu ainult ühele meetodile, sest tegemist on abstraktse klassiga // me ei pea kõike ise tegema public int leiaJalgadeArv() { // sest kõigil imetajail on neli jalga return 4; } } class Kass extends Imetaja { // siin realiseerime kõik, mis vaja, aga jalgade arvu uuesti tegema ei pea // see on Imetaja abstraktses klassis juba tehtud. // ühtlasi on ka see klass kasutatav igal pool kui Loom, sest läbi Imetaja // pärib ta Looma omadused public boolean sööLoom(Loom ohver) { // kass sööb teisi loomi return true; } public boolean sööTaim(Taim ohver) { // taimi ei söö return false; } return "mjäu"; } }
|
_________________ Foxic is just a simple fox
Enne kui sa küsid oma küsimuse - küsi seda vannipardilt! Rangelt soovitatav enne programmeerimise alafoorumisse uue teema tegemist. |
|
Kommentaarid: 2 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
2 |
|
tagasi üles |
|
 |
keevitaja
AM 10 aastat

liitunud: 05.11.2001
|
28.05.2010 18:55:39
|
|
|
ka php-s on olemas interfaced...
_________________ Hinnavaatlus ei ole koht arvamuse avaldamiseks! |
|
Kommentaarid: 51 loe/lisa |
Kasutajad arvavad: |
   |
:: |
1 :: |
3 :: |
40 |
|
tagasi üles |
|
 |
telefoon
HV vaatleja
liitunud: 05.05.2003
|
29.05.2010 12:54:17
|
|
|
Abstract class'i kasutamiseks peab tegema sellele alamklassi. Üks alamklass aga ei saa extendida mitut ülemklassi.
Interface'ga on aga nii, et üks klass võib implementeerida mitmeid interface'e. Selles mõttes on interface palju dünaamilisem.
|
|
Kommentaarid: 7 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
7 |
|
tagasi üles |
|
 |
blinx
HV vaatleja
liitunud: 28.11.2009
|
29.05.2010 20:12:57
|
|
|
Ei ole tõesti kiiruse vahet abstraktklasside meetoditel ja tavalistel.
_________________ 'Just buy everything then you're safe'
viimati muutis blinx 31.05.2010 00:20:21, muudetud 2 korda |
|
tagasi üles |
|
 |
Ho Ho
HV Guru

liitunud: 16.02.2002
|
29.05.2010 23:17:56
|
|
|
blinx kirjutas: |
Minuarust pole mõtet abstraktklasse ilmaasjata kasutada. Kui õigesti mäletan siis kaasneb sellega käitusaegne töötlusaja
pikenemine igas keeles. |
Ei tohiks olla mingist otsast keerulisem, kui hariliku klassi extendimine. Abstraktse klassi otse loomise kontroll tehakse ära kompileerimise ajal.
_________________ Teach a man to reason and he'll think for a lifetime
Common sense - so rare that it's a damn superpower
Vaadates paljude inimeste sõnavõtte siin ja mujal jääb üle ainult klassikuid tsiteerida - "I weep for humanity" |
|
Kommentaarid: 106 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
1 :: |
86 |
|
tagasi üles |
|
 |
keevitaja
AM 10 aastat

liitunud: 05.11.2001
|
29.05.2010 23:38:58
|
|
|
kas oleks võimalik saada klassi nimi ilma namespaceta kätte?
php:
|
<?php //PHP 5.3.x namespace some\where; abstract class ParentClass { public static function name () { } public static function get_name () { } } class ChildClass extends ParentClass { } ChildClass::get_name(); ?>
|
tulemus mis ma tahan: childclass
tulemus mille saan: some\where\childclass
ja kas kuidagi saaks selle name() statilisse muutujasse kui ainult staatiline meetod on väljakutsutud?
edit: krt nüüd hakkasin ise mõtlema selle muutujasse saamise üle. sel juhul peaks nagu __construct käivituma kui statiline meetod välja kutsutakse... aga seda ju ei saagi juhtuda
_________________ Hinnavaatlus ei ole koht arvamuse avaldamiseks! |
|
Kommentaarid: 51 loe/lisa |
Kasutajad arvavad: |
   |
:: |
1 :: |
3 :: |
40 |
|
tagasi üles |
|
 |
keevitaja
AM 10 aastat

liitunud: 05.11.2001
|
30.05.2010 15:44:31
|
|
|
morgoth kirjutas: |
IMO DB klassil võiks ka mingi error handling olla. Hea kuskile logisse salvestada, kui midagi nihu läheb, või transaktsioonile rollbacki teha.
|
mida sa selle all mõtled?
_________________ Hinnavaatlus ei ole koht arvamuse avaldamiseks! |
|
Kommentaarid: 51 loe/lisa |
Kasutajad arvavad: |
   |
:: |
1 :: |
3 :: |
40 |
|
tagasi üles |
|
 |
Fukiku
Kreisi kasutaja

liitunud: 06.11.2003
|
30.05.2010 23:56:23
|
|
|
keevitaja kirjutas: |
morgoth kirjutas: |
IMO DB klassil võiks ka mingi error handling olla. Hea kuskile logisse salvestada, kui midagi nihu läheb, või transaktsioonile rollbacki teha.
|
mida sa selle all mõtled? |
Milline osa arusaamatuks jääb, et mitte tervet maad ja ilma lahti seletada?
_________________ Foxic is just a simple fox
Enne kui sa küsid oma küsimuse - küsi seda vannipardilt! Rangelt soovitatav enne programmeerimise alafoorumisse uue teema tegemist. |
|
Kommentaarid: 2 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
2 |
|
tagasi üles |
|
 |
keevitaja
AM 10 aastat

liitunud: 05.11.2001
|
31.05.2010 00:24:54
|
|
|
põmst kogu see jutt. ehk siis mingeid erroried see klass ju vajadusel kuvab. kas oleks pigem passlikum need errorid kuhugi muutujasse panna? mida tähendab transaktsioonile rollback...
_________________ Hinnavaatlus ei ole koht arvamuse avaldamiseks! |
|
Kommentaarid: 51 loe/lisa |
Kasutajad arvavad: |
   |
:: |
1 :: |
3 :: |
40 |
|
tagasi üles |
|
 |
raido357
HV veteran
liitunud: 26.09.2002
|
31.05.2010 06:30:49
|
|
|
keevitaja kirjutas: |
... mida tähendab transaktsioonile rollback... |
Seda, et enne enne kui lõplikult andmed andmebaasi kirjutatakse on võimalik seda tühistada.
A'la teed mingise INSERTI aga siis juhtub järgmises rakenduse faasis midagi ja siis saad tegevuse katkestada ja andmebaasist kah andmed kustutada, kasutades ROLLBACK käsku. Mitte ei pea hakkama DELETE statementi tekitama.
http://www.databasejournal.com/features/mysql/article.php/3382171/Transactions-in-MySQL.htm
|
|
Kommentaarid: 78 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
70 |
|
tagasi üles |
|
 |
Le Inc
HV Guru

liitunud: 06.09.2002
|
31.08.2011 07:56:10
|
|
|
Küsimus. Kas objekti meetoditest saab kuidagi "väljundit" kätte ilma return'ita. Ehk on meetod (funktisioon) mis teeb midagi tarka, kuid vahel võib ka viga tulla mis try ja catch kinni püütakse. Kui ma "echo" kirjutan siis see pritsitakse html, AGA tahaks kuskile muutujasse susata ja koodis "õiges kohas" uuesti välja lasta. Ainuke hetkel töötav variant on return susata ja sealt a la echo $klass->TereTore(); (// samal ajal käivitatakse funktsioon) kätte saada.
Kas saaks kuidagi teistmoodi ka?
|
|
Kommentaarid: 56 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
54 |
|
tagasi üles |
|
 |
jnt
HV Guru

liitunud: 10.05.2005
|
|
Kommentaarid: 110 loe/lisa |
Kasutajad arvavad: |
   |
:: |
2 :: |
0 :: |
102 |
|
tagasi üles |
|
 |
Le Inc
HV Guru

liitunud: 06.09.2002
|
31.08.2011 08:09:59
|
|
|
jnt kirjutas: |
& märk pane funktsiooni/meetodi argumendi ette. Siis muutes seda sees pool funktsiooni/meetodit muutub ka väljas pool see sama muutuja sisu. Lisaks olemas $_GLOBALS ja lihtsalt muutujate globaalseks tegemine. |
Tänud proovin järgi.
Heh, leidsin just ka lahenduse. Tuleb uus meetod teha mis lihtsalt tagastab väärtuse.
function annaViga () {
return $this->error;
}
hiljem koodis echo $klass->annaViga();
|
|
Kommentaarid: 56 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
54 |
|
tagasi üles |
|
 |
jnt
HV Guru

liitunud: 10.05.2005
|
31.08.2011 08:13:09
|
|
|
Le Inc, muidugi saad klassis olevaid property'eid funktsiooni sees kasutada. Vaata ainult, et siis korraliku koodi mõistes klassis nood property'd ära ka defineerid.
Errorite jaoks võiks üldse üks staatiline error klass olla või veel enam, tee enda error handler ja siis lihtsalt trigger'dad erroreid ja su enda klass püüab nad kinni ja teeb, mida vaja.
_________________ Progemisest: https://byteaether.github.io/
Seisab keldris vana 386-486-Pentium1? Räägime! Ehk saan vanakesele uue elu anda.
Vaata siia, äkki müün midagi põnevat -> https://www.osta.ee/index.php?fuseaction=listing.seller&q[seller]=jnt |
|
Kommentaarid: 110 loe/lisa |
Kasutajad arvavad: |
   |
:: |
2 :: |
0 :: |
102 |
|
tagasi üles |
|
 |
Le Inc
HV Guru

liitunud: 06.09.2002
|
31.08.2011 08:30:16
|
|
|
Põmst trein üht klassi mis SOAP kaudu majandaks mobiil-id. Hetkel on plaanis piirduda ainult autentimisega, signeerimine jääb kunagi tulevikku, kui mul endal tekib selle järgi otsene vajadus.
Veakoodid mis tekivad SOAP päringust kutsuvad php Fatal Error'i välja (milleks!?). Ilma try ja catch jääks kood kinni. Hetkel olen veamajanduse array ära lahendanud (catch püüab SoapFault veastringi kinni), kus vastavale veakoodile on masiivis ka "tõlge".
Vististi on SK ka sarnasest koodist huvitatud (nende näide on PEAR põhine). Võimalik kui koodi valmis saan panen siisa üles, saate suuremad OOP kunnid üle kaeda (see mul esimene OOP moodi progemine). hetkel väga ei julge avalikult turule minna.
|
|
Kommentaarid: 56 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
54 |
|
tagasi üles |
|
 |
Erti-Chris
HV vaatleja

liitunud: 23.07.2011
|
31.08.2011 11:43:07
|
|
|
Le Inc kirjutas: |
Põmst trein üht klassi mis SOAP kaudu majandaks mobiil-id. Hetkel on plaanis piirduda ainult autentimisega, signeerimine jääb kunagi tulevikku, kui mul endal tekib selle järgi otsene vajadus.
Veakoodid mis tekivad SOAP päringust kutsuvad php Fatal Error'i välja (milleks!?). Ilma try ja catch jääks kood kinni. Hetkel olen veamajanduse array ära lahendanud (catch püüab SoapFault veastringi kinni), kus vastavale veakoodile on masiivis ka "tõlge".
Vististi on SK ka sarnasest koodist huvitatud (nende näide on PEAR põhine). Võimalik kui koodi valmis saan panen siisa üles, saate suuremad OOP kunnid üle kaeda (see mul esimene OOP moodi progemine). hetkel väga ei julge avalikult turule minna.  |
http://php.net/manual/en/function.set-error-handler.php
püüab kõik errorid kinni..
|
|
Kommentaarid: 1 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
1 |
|
tagasi üles |
|
 |
|