phpbar.de logo

Mailinglisten-Archive

[php] =?iso-8859-1?Q?RE:_=5Bphp=5D_objektorientierung_in_php_/_news_e intr=E4ge?=

[php] RE: [php] objektorientierung in php / news e inträge

flim php_(at)_phpcenter.de
Mon, 11 Feb 2002 01:08:18 +0100


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