Oldal: 1 / 2 12 UtolsóUtolsó
Eredmény: 1 - 10 (17) összesen

Téma: PHP classok vagy nem-classok

  1. #1
    MinderBinder edem logója
    Csatlakozott
    09-09-02
    Hely
    Budapest
    Hozzászólás
    1.093
    Thanked 1 Time in 1 Post

    Alapbeállítás PHP classok vagy nem-classok

    A napokban merültem bele a PHP OOP részébe. Készítettem pár oldalt, amikben objektumokat használtam és nekem nagyon tetszik ez a módszer. Kérdeztem informatikus ismerőseim véleményét és meglepődve tapasztaltam, hogy mindenkinek teljesen mások a gondolatai erről! Van, aki azt mondja, hogy fölösleges objektumokat használni, csak akkor, ha nagyon muszáj, mert erőforrás-igényesebb a "normál" kódnál az objektumépítgetés, van aki pedig mindenhez objektumokat használ és erre esküszik. Szerintetek hol/mire/hogyan érdemes OOP-t használni PHP-ban?



  2. #2
    Bölcs huncyrus logója
    Csatlakozott
    07-04-26
    Hely
    EU :)
    Hozzászólás
    541
    Begyűjtött 4 köszönetet
    4 hozzászólásával

    Alapbeállítás re: PHP classok vagy nem-classok

    Ez az OOP egy érdekes dolog.
    Sokan úgy kezelik a php-beli class-okat, mintha objektumok lennének, holott csak egyes tulajdonságaiban egyezik meg. Tényleges objektum-használatról nagyon-nagyon ritkán beszélhetünk.

    Már más topikokban elemeztük eme kérdést, nem kevés posttal.
    Annyi a lényeg, hogy OOP-t akkor használunk elsősorban, ha:
    a., - muszáj
    b., - a feladat megköveteli

    Sok esetben egy pofonegyszerű melóban egy síma osztály, vagy funkcio is lazán elég. Az osztályokat és objektumokat pedig akkor érdemes használni, ha az adott project összetett, és nem akarsz 2x-3x leprogramozni ugyan azt, vagy másolgatni a kódokat.

    Tény, hogy ha OOP-zel, akkor előfordulhat, hogy jelentősen több fölösleges kód / méret jön létre, és nem biztos, hogy minden funkcioját ki is használod, ugyanakkor az is tény, hogy a legtöbb esetben gyorsabb vele elérni az adott célt. Főként ha jól van megírva az adott osztály / ojjektum.

    (Én magam részéről ilyesmire adatbázis kezelőt, cache rendszert, wml rendszert, templatező rendszert használok. a többi dolgot általában síma, egyszerű funkciok művelik. )


    Cyrusmagus.hu - Informatika, Fantasy, Blog, Irások

  3. #3
    MinderBinder edem logója
    Csatlakozott
    09-09-02
    Hely
    Budapest
    Hozzászólás
    1.093
    Thanked 1 Time in 1 Post

    Alapbeállítás re: PHP classok vagy nem-classok

    Azt hiszem itt fogalomzavarról lehet szó. A class az csak afféle "sablon", akkor "kel életre", amikor meghívod az adott class-t és ekkor lesz belőle egy objektum. Tudnál linkelni topikot?



  4. #4
    kow
    kow nem elérhető
    KowDerMei$ter kow logója
    Csatlakozott
    07-05-09
    Hely
    Budapest
    Hozzászólás
    1.447
    Begyűjtött 0 köszönetet
    0 hozzászólásával

    Alapbeállítás re: PHP classok vagy nem-classok

    Több eset is van, amit el tudok képzelni, hogy mikor érdemes objektumokat használni.
    • Open source class-ok használatakor, gyakran csomagolják az adatbázis, képkezelő, szöveg manipulátor kódokat osztályokba.
    • Ha nem szeretnéd egyszerűen egy functions.php-be dobálni a függvényeket, hanem mondjuk egy csokroba szeretnéd fonni a hasonló függvényeket, akkor érdemes már külön class-ba tenni őket. Ez könnyebben áttekinthető kódot eredményez, valamint könnyebb megtalálni, hogy hol is definiáltál egy függvényt.
    • Olyan a feladat, hogy valamilyen izmosabb struktúra vélhető felfedezni a rendszerben, pl. termék kezelés. Minden termék rendelkezhet súllyal, gyártóval, de csak az élelmiszerek lejárati idővel, míg a vegyi anyagok gyúlékonysággal mondjuk.
    • MVC keretrendszerek használatakor elkerülhetetlen, hogy OOP alapon dolgozz. Ott jellemzően a rendszer által felkínált osztályokat kell kibővítened a saját igényeid szerint.

    Én javaslom a használatukat, de ha nagyon egyszerű scripteket kell készítened, egyszeri alkalomra, vagy tudod, hogy a jövőben nem nagyon kell vele foglalkoznod, akkor maradj a procedurális módszernél.

    Az objektumok erőforrás igényességét illetően ne hagyd magad megtéveszteni, itt olyan apró különbségekről van szó, hogy nagyon extém esetekben fog ez csak előjönni. Nem a performancia az elsődleges szempont, hanem hogy a feladat meg legyen oldva, ez persze nem jelenti azt, hogy oldjuk meg direkt rosszul az adott feladatot, csak azt, hogy nem érdemes álmatlanul forgolódni, mert valami 99.99%-ot telejesít egy másik módszerhez képest.


    Utoljára módosítva: kow által : 2009-11-17 13:54

  5. #5
    Bölcs
    Csatlakozott
    07-08-28
    Hozzászólás
    1.030
    Begyűjtött 150 köszönetet
    109 hozzászólásával

    Alapbeállítás re: PHP classok vagy nem-classok

    class -ok / objektumok.

    Ajánlok egy egyszerü megközelitést. A classok -ban tudsz definiálni úgynevezett statikus függvényeket. Ezek a függvények gyakorlatilag csak tároló eszköznek használják a class -t.
    igy néz ki a class -od:
    PHP kód:
    class valami
    {
       public static function 
    korte()
       {
          echo 
    'korte vagyok';
       }
    }

    valami::korte() 
    És a fenti módon hivatkozol rá.

    És ha jól csinálod akkor még kiegészited egy auto load fügvényel is:

    PHP kód:
    function __autoload($classname)
    {
      if(
    is_file('./classes/' $classname '.php'))
      {
         include(
    './classes/' $classname '.php');
      }
      else
      {
         die(
    'Class:' $classname' . ' not found');
      }

    Igy ha az összes class -t amit használsz jól nevezed el, berakod a classes könyvtárba, akkor a kódban elég hivatkozni rá hogy valami::korte() és a rendszer a kezed alá tolja. Nem kell include-al vacakolni.

    Igy megmaradt az egyszerü procedurális kód, ugyan akkor kihasználtad a php 5.2 fontosabb újjitásait.


    Utoljára módosítva: TLoF által : 2009-11-17 18:00 Oka: Csak 2 php blokk lehetséges

  6. #6
    MinderBinder edem logója
    Csatlakozott
    09-09-02
    Hely
    Budapest
    Hozzászólás
    1.093
    Thanked 1 Time in 1 Post

    Alapbeállítás re: PHP classok vagy nem-classok

    Idézet kow eredeti hozzászólása Hozzászólás megtekintése
    Több eset is van, amit el tudok képzelni, hogy mikor érdemes objektumokat használni.
    • Open source class-ok használatakor, gyakran csomagolják az adatbázis, képkezelő, szöveg manipulátor kódokat osztályokba.
    • Ha nem szeretnéd egyszerűen egy functions.php-be dobálni a függvényeket, hanem mondjuk egy csokroba szeretnéd fonni a hasonló függvényeket, akkor érdemes már külön class-ba tenni őket. Ez könnyebben áttekinthető kódot eredményez, valamint könnyebb megtalálni, hogy hol is definiáltál egy függvényt.
    • Olyan a feladat, hogy valamilyen izmosabb struktúra vélhető felfedezni a rendszerben, pl. termék kezelés. Minden termék rendelkezhet súllyal, gyártóval, de csak az élelmiszerek lejárati idővel, míg a vegyi anyagok gyúlékonysággal mondjuk.
    • MVC keretrendszerek használatakor elkerülhetetlen, hogy OOP alapon dolgozz. Ott jellemzően a rendszer által felkínált osztályokat kell kibővítened a saját igényeid szerint.

    Én javaslom a használatukat, de ha nagyon egyszerű scripteket kell készítened, egyszeri alkalomra, vagy tudod, hogy a jövőben nem nagyon kell vele foglalkoznod, akkor maradj a procedurális módszernél.

    Az objektumok erőforrás igényességét illetően ne hagyd magad megtéveszteni, itt olyan apró különbségekről van szó, hogy nagyon extém esetekben fog ez csak előjönni. Nem a performancia az elsődleges szempont, hanem hogy a feladat meg legyen oldva, ez persze nem jelenti azt, hogy oldjuk meg direkt rosszul az adott feladatot, csak azt, hogy nem érdemes álmatlanul forgolódni, mert valami 99.99%-ot telejesít egy másik módszerhez képest.
    Köszi, ez segített. Én most éppen egy jutalékszámítási rendszeren dolgozok a cégemnek. Eddig úgy csináltam, hogy van egy portál class-om. Abból származtattam a portal_jutalek class-t, amiben felépítem ezt a portált. Header, tartalom, lábléc. A tartalmi részért pedig a lap class a felelős, ami egy absztrakt osztály, ebből származtatom az alodalakat. Az aloldalakon egy-egy menüpont pedig az aloldal class egy funkciója. A $_GET-ben tárolt infok alapján dönti el, hogy mit töltsön be, melyik oldalt, és meliyk funkciót. Az eddigi oldalaimhoz képest sokkal áttekinthetőbb lett így és nem mellesleg nagyon tetszik ez a megoldás. Ki hogy csinálná?



  7. #7
    MinderBinder edem logója
    Csatlakozott
    09-09-02
    Hely
    Budapest
    Hozzászólás
    1.093
    Thanked 1 Time in 1 Post

    Alapbeállítás re: PHP classok vagy nem-classok

    Idézet TLoF eredeti hozzászólása Hozzászólás megtekintése
    class -ok / objektumok.

    Ajánlok egy egyszerü megközelitést. A classok -ban tudsz definiálni úgynevezett statikus függvényeket. Ezek a függvények gyakorlatilag csak tároló eszköznek használják a class -t.
    igy néz ki a class -od:
    PHP kód:
    class valami
    {
       public static function 
    korte()
       {
          echo 
    'korte vagyok';
       }
    }

    valami::korte() 
    És a fenti módon hivatkozol rá.

    És ha jól csinálod akkor még kiegészited egy auto load fügvényel is:

    PHP kód:
    function __autoload($classname)
    {
      if(
    is_file('./classes/' $classname '.php'))
      {
         include(
    './classes/' $classname '.php');
      }
      else
      {
         die(
    'Class:' $classname' . ' not found');
      }

    Igy ha az összes class -t amit használsz jól nevezed el, berakod a classes könyvtárba, akkor a kódban elég hivatkozni rá hogy valami::korte() és a rendszer a kezed alá tolja. Nem kell include-al vacakolni.

    Igy megmaradt az egyszerü procedurális kód, ugyan akkor kihasználtad a php 5.2 fontosabb újjitásait.
    Az __autoload() mágikus funkciót pont így használom az oldalon, tehát nincs szinte sehol if, vagy switch (csak a session kezelésnél), hanem $_GET szerint töltögeti a cuccokat, amit előtte egy ellenőrző objektumon átfuttatok, így nem lehet buherálni az URL-el. Így néz ki egyébként az index.php-m:
    PHP kód:
    <?php 
    // header beállítás
        
    session_start();
        
    header ('Content-type: text/html; charset=utf-8');
    // pontos idő
        
    $time microtime();

    // betölti a library-t    
        
    require 'standard-lib.php';

    // ellenőrző objektumot felépít, ellenőriz
        
    $ellenorzo = new ellenorzo();
        
    $ellenorzo->getet_vizsgal();
        
    $ellenorzo->usert_vizsgal();

    // létrehozza a site objektumot
        
    $portal = new portal_jutalek();

    // menü alapján lap kiválasztása
        
    $betoltendo_lap "lap_$menu";

    // lap feltöltése változókba
        
    $lap = new $betoltendo_lap("Üdvözöllek ".$_SESSION['user']."! Itt vagy most: Jutalékszámítás > $menu");

    // lap renderelése    
        
    $portal->lapot_beallit($lap);
        
    $lap->navigaciot_beallit();
        
    $lap->tartalmat_beallit();
        
    $lap->$funkcio();
        
    $portal->megrajzol();

    // generálási idő kiszámítása
        
    $time microtime() - $time;
        echo 
    "Generálva: $time alatt (sec.microsec)";
    ?>
    A class-ok funkciói pedig public-ok, minden class-ban csak azok az egyedi funkciók vannak definiálva, amit az adott lapon használható.



  8. #8
    kow
    kow nem elérhető
    KowDerMei$ter kow logója
    Csatlakozott
    07-05-09
    Hely
    Budapest
    Hozzászólás
    1.447
    Begyűjtött 0 köszönetet
    0 hozzászólásával

    Alapbeállítás re: PHP classok vagy nem-classok


    Köszi, ez segített. Én most éppen egy jutalékszámítási rendszeren dolgozok a cégemnek. Eddig úgy csináltam, hogy van egy portál class-om. Abból származtattam a portal_jutalek class-t, amiben felépítem ezt a portált. Header, tartalom, lábléc. A tartalmi részért pedig a lap class a felelős, ami egy absztrakt osztály, ebből származtatom az alodalakat. Az aloldalakon egy-egy menüpont pedig az aloldal class egy funkciója. A $_GET-ben tárolt infok alapján dönti el, hogy mit töltsön be, melyik oldalt, és meliyk funkciót. Az eddigi oldalaimhoz képest sokkal áttekinthetőbb lett így és nem mellesleg nagyon tetszik ez a megoldás. Ki hogy csinálná?
    Ez elég szimpatikusan hangzik, de a lényeg, hogy kiigazodsz rajta és élmény benne fejlesztened.



  9. #9
    MinderBinder edem logója
    Csatlakozott
    09-09-02
    Hely
    Budapest
    Hozzászólás
    1.093
    Thanked 1 Time in 1 Post

    Alapbeállítás re: PHP classok vagy nem-classok

    Idézet kow eredeti hozzászólása Hozzászólás megtekintése
    Ez elég szimpatikusan hangzik, de a lényeg, hogy kiigazodsz rajta és élmény benne fejlesztened.
    Viccen kívül tényleg élmény így fejleszteni Én kiigazodok rajta, de szerintem majd rakok bele kommenteket, mert valószínűleg más is fogja olvasni a kódomat.



  10. #10
    kow
    kow nem elérhető
    KowDerMei$ter kow logója
    Csatlakozott
    07-05-09
    Hely
    Budapest
    Hozzászólás
    1.447
    Begyűjtött 0 köszönetet
    0 hozzászólásával

    Alapbeállítás re: PHP classok vagy nem-classok

    Viccen kívül tényleg élmény így fejleszteni Én kiigazodok rajta, de szerintem majd rakok bele kommenteket, mert valószínűleg más is fogja olvasni a kódomat.
    Pl. te magad fél év múlva, jó ilyenkor jófejnek lennei önmagaddal szemben



Oldal: 1 / 2 12 UtolsóUtolsó

A téma címkéi:

Könyvjelzők

Hozzászólás szabályai

  • Új témákat nem hozhatsz létre
  • Válaszokat nem küldhetsz
  • Fájlokat nem csatolhatsz
  • A hozzászólásaidat nem módosíthatod
  •