Mailinglisten-Archive |
Hiho, 'News' sind irgendwie ein schlechtes Beispiel für eine Klasse - und zwar weil man das auf zwei Wegen angehen kann: Du kannst entweder ein Objekt 'Neuigkeit' anlegen, oder ein Objekt 'Neuigkeiten' ;-> Ich würde letzteres tun und das etwa so: <?php if (!defined("CLASS_news")) { define("CLASS_news", true); Class News { var $sPageidentifier; var $aNewsArray(); var $iMaxNewsPerPage; var $iCurrentStartpunkt; function News ($sPage="") { $this->iCurrentStartpunkt = 0; $this->_getBasisConfiguration(); $this->_getNews (); } function _getBasisConfiguration() { //"globale" Klassenvariablen von irgendwoher besetzen (z.B. Datei/DB) } function _getNews ($iStartpunkt=false, $iMaxAnzahl=false) { if ($iStartpunkt == false) { $iStartpunkt = $this->iCurrentStartpunkt; } if ($iMaxAnzahl == false) { $iMaxAnzahl = $this->iMaxNewsPerPage; } //DBstuff: ... $sSql="SELECT x,y,z FROM news WHERE ... ORDER BY...LIMIT..."; ... while ($aRow = mysql_fetch_row()) { $this->aNewsArray[] = $aRow; } return($this->aNewsArray); } function readNews ($iStartpunkt=false, $iMaxAnzahl=false) { static $aArray; static $iLastStartpunkt; static $iLastMaxAnzahl; if ($iStartpunkt == $iLastStartpunkt && $iMaxAnzahl == $iLastMaxAnzahl && is_array($aArray)) { //simple caching return ($aArray); } else if ($iStartpunkt == $this->iCurrentStartpunkt && $iMaxAnzahl == $this->iMaxNewsPerPage && is_array($this->aNewsArray)) { return ($this->aNewsArray); } else { return ($this->_getNews($iStartpunkt, $iMaxanzahl); } } function _validateEntries ($mX, $mY, $mZ) { if (...) { return(true); } else { return(false); } } function insert ($mX, $mY, $mZ) { if ($this->_validateEntries($mX, $mY, $mZ)) { //dbstuff ... return(mysql_insert_id()); } else { return(false); } } function update ($iId, $mX, $mY, $mZ) { if ($this->_validateEntries($mX, $mY, $mZ)) { //dbstuff ... return(true); } else { return(false); } } function delete ($iId) { //dbstuff return (true||false); //:-) } } } ?> Wenn man dem News gedanken weiter folgt, könnte man jetzt einfach Methoden einfügen, die sich um Datum etc. kümmern - beispielswiese Erstellungsdatum und 'last update'. Die Methoden sind nicht zu umfangreich und auf ihre Aufgaben begrenzt - was wichtiger ist, als den Umfang gering zu halten. Es ist kaum Aufgabe einer insert Methode, die Daten zu prüfen, also ruft sie dazu eine andere Methode auf. Sinnig ist es in jedem Fall, zwischen öffentlichen und privaten Methoden zu unterscheiden - PHP unterstützt das nicht, aber es hilft bei der Strukturierung der Klasse. PEAR schlägt _funktionsname für private methoden vor - und es ist immer gut sich am PEAR-quasi-standart zu orientieren:-) Ich hoffe, das hilft dir weiter, Flim > -----Original Message----- > From: php-admin_(at)_phpcenter.de [mailto:php-admin_(at)_phpcenter.de] > On Behalf Of Markus Teich > Sent: Monday, February 11, 2002 12:05 AM > To: php_(at)_phpcenter.de > Subject: [php] objektorientierung in php / news einträge > > > hi all.. ich hätte eine etwas längere frage.. > hoffe ich bekomme trotzdem eine antwort.. > naja ich stell sie einfach mal. > > ich möchte ein kleines news system (einfaches html formular), > objektorientiert schreiben. der news eintrag besteht aus > $headline $body $date $pic (link/pfad wird als text in die db > geschrieben) > > bis jetzt habe ich auf der zielseite halt einfach alles > nacheinander gemacht. variablen checken..in die db schreiben.. > > jetzt habe ich mir ein java buch gekauft um die > obkjektorientierung ein bischen zu checken und einen einblick > zu bekommen. das prinzip ist mir klar.. kapselung / vererbung > / nur über methoden auf die objektvariablen zugreiffen etc. > nur wird dies in meinem java buch meistens abstrakt zB anhand > von klasse auto methoden gang hochschalten (checken ob > überhaupt möglich) einschalten/ ausschalten bla bla > erläutert. um das system zu kapieren bestimmt nicht > schlecht...nur wie setzte ich sowas in die praxis um? > > ich habe mir eine kleine klasse geschrieben um die datenbank > zu steuern... insert/ select / connect etc. da habe ich > einige beispiele gefunden.. > > doch jetzt zu den news einträgen.. > wie würde sowas als klasse ausschauen? > > ich brauche auf jedenfall die methoden > news_eintragen($headline, $body.....) > news_update($id) > news_delete($id) > > und die objektvariablen > $headline, $body etc... > aber ist das richtig so? > dann ahbe ich riesen methoden.. > checken ob die variablen alle gesetzt sind bei > news_eintragen($xx) wenn nicht zurückleiten und fehler.. wenn > ok.. dann in die db schreiben. das wird ziemich viel in einer > methode.. > > und der sinn ist doch methoden möglichst klein zu halten.. > was könntet ihr mir raten.. bei diesem einfachen beispiel.. > > würde mich über eine antwort freuen > > markus > -- > ** http://www.php-center.de ** > Die PHP-Liste: mailto: php_(at)_phpcenter.de > http://lists.phpcenter.de/mailman/listinfo/php
php::bar PHP Wiki - Listenarchive