Topic: Classes (OOP)

Sveiki Internautai,

Pradėjau bandyt programuot OOP.
Norėčiau paklaust šio to. :)

Pavyzdys:

Turime pavyzdžiui tris failiukus: index.php db.class ir lib.class

index.php ----- Užkrauna informaciją, naudojant klasę:  $lib->$informacija();
lib.php --------  Pati aprašyta klasė class lib {...}
db.php --------  Databazės klasė class db {...}.

Kaip jūs užkrautumėte db.class, norint manipuoliuoti db klasėje lib? :)
Tiesiog ar tiesiog konstruktoriuj naudojat:
$lib = new Lib();

Ačiū ūž pagalbą. :)

Re: Classes (OOP)

Pasidomek design paternais

3 (edited by qutwala 2011-05-21 21:29:04)

Re: Classes (OOP)

Dėkui Neodan, paieškosiu informacijos. :)

Kažką radau įdomaus: http://www.ibm.com/developerworks/libra … signptrns/
Turit ką geriau pasiūlyt? :)

Re: Classes (OOP)

Tame linke tai labiau teoriškai aprašyta (kas man labai nepatinka).
http://www.oodesign.com/, čia praktiškiau, paaiškinama kur kada kokį patternsą naudoti.

qutwala wrote:

Dėkui Neodan, paieškosiu informacijos. :)

Kažką radau įdomaus: http://www.ibm.com/developerworks/libra … signptrns/
Turit ką geriau pasiūlyt? :)

Re: Classes (OOP)

štai ko tau reikia :)
http://fabien.potencier.org/article/11/ … -injection
http://twittee.org/
[D]ependency [i]njection ;)

Kiek maigyklių sudėvėjai ?

Re: Classes (OOP)

PHP Architect nanobooks - PHP Architects Guide to PHP Design Patterns - 2005.pdf (3,3Mb)

7 (edited by qutwala 2011-05-22 18:24:34)

Re: Classes (OOP)

Vaje.. o čia tai bus reikalų! :D
Ačiū už naudingas nuorodas, skaitysiu! :)

EDIT:
------------------------

http://php-html.net/tutorials/model-vie … er-in-php/
Vat, radau dar kažką, - MVC. :)

8 (edited by Lukas 2011-05-22 23:03:56)

Re: Classes (OOP)

Apie DI gali dar pasiskaityti ir išbandyti http://components.symfony-project.org/d … injection/
arba tiesiog http://php.net/manual/en/language.oop5.autoload.php http://www.php.net/manual/en/function.s … gister.php

MVC- super dalykas, kuri naudoja visi normalūs karkasai. Pvz  http://book.cakephp.org/view/890/Unders … Controller

Nors Cake'as ir neišnaudoja visų OOP galimybių, pradžiai pasižaisti su juo yra gan smagu, juolab yra nemažai tutorlailų bei dokumentacija viena aiškiausių rinkoje.


Warning: count(): Parameter must be an array or an object that implements Countable in /home/pasokime/domains/mysql.lt/public_html/forumas/include/parser.php on line 820

Re: Classes (OOP)

Heh, dariau visa laika md5 paminėjo apie DI. Net nežinojau kad čia kažkaip vadinas dar šitas dalykas :) Bet visai geras dalykas: $core->db->query() ir pan.

Dėkui md5, bent sužinojau kad šitas dalykas kažkaip vadinas :)

Re: Classes (OOP)

Prikeliu seną temą:))

Problemos su OOP, žodžiu trumpai ir aiškiai:

<?
class db {
   var $qq;
   public function __construct() {    
    }
   function assign($var) { $this->qq = $var; }
   function test() {
        echo $this->assign('test'); // kažkaip nelabai nori veikt.. 
        echo $this->qq = 'qq'; //veikia
               /*Reziumė: any ideas? :D*/
        
   }
  }
$obj = new db();
$obj->test();
?>

Ir kaip visuomet dėkui už support'ą gerbiamieji, geros dienos. :))

Re: Classes (OOP)

function assign($var) { $this->qq = $var; }

jokio return neturi

P.S. Tą var $qq pasikeisk į public|protected|private $qq; Nes kažkaip php4 primena :)

MongoDB Certified Developer
MongoDB Certified DBA
Zend Certified Engineer

12 (edited by qutwala 2011-06-30 07:01:48)

Re: Classes (OOP)

zygis wrote:
function assign($var) { $this->qq = $var; }

jokio return neturi

P.S. Tą var $qq pasikeisk į public|protected|private $qq; Nes kažkaip php4 primena :)

Oooj.. return visiškai iš galvos išgaravo, gi rimtai, čia f-ja.. :))

Na, o pati idėja tai čia pasidaryt darbui su mysql klasę ir ją naudoti "extends" su model'io klase.:))
Dėkui už greitą atsakymą, bei patarimą zygi! :))

Re: Classes (OOP)

to qutwala: rekomenduoju pasiskaityti http://www.php.net/manual/en/language.o … bility.php

Re: Classes (OOP)

Neodan wrote:

to qutwala: rekomenduoju pasiskaityti http://www.php.net/manual/en/language.o … bility.php

Ačiū, už nuorodą! :))

15 (edited by qutwala 2011-06-30 09:25:27)

Re: Classes (OOP)

Na ką, žaidžiu ir toliau su OOP. Nepeikit, kad „priskretau“ su tais klausimais, tačiau stengiuos taip pat daryti išvadas iš duodamų patarimų. :))
Taigi, papeistinsiu koduką ir jeigu nesunku pakomentuokite ar pataisykite, kaip iš tikro realiai turėtų atrodyti mano siekiamas rezultatas. :))
Taigi, mano variantas, veikiantis, bet kaip žinau, kad „veikiatis“ dar nėra ir geras:

class db {
    public $test;
    function __construct() {
       print "In BaseClass constructor\n<br />";
   } 
  public function setvar($var) { return $this->test = $var; } 
  public function dbsetup() {
    $testvar = 'testing..';
    $this->setvar($testvar);
  }
  public function dbconnect() {
        $this->dbsetup();
        echo $this->test; // grąžina var.
    }
  }
class SubClass extends db {
   function __construct() {
       parent::__construct();
   }
}
$obj = new db();
$obj->dbconnect();
$obj = new SubClass();
?>

Ačiū!

Re: Classes (OOP)

function __construct() {
       parent::__construct();
   }

ši dalis nereikalinga (jei kodo tik tiek bus)

klasės metoduose neturėtų būti echo, nes tai pažeižia MVC principus, Na nebent tai yra jau V dalies realizacija.

MongoDB Certified Developer
MongoDB Certified DBA
Zend Certified Engineer

Re: Classes (OOP)

zygis wrote:
function __construct() {
       parent::__construct();
   }

ši dalis nereikalinga (jei kodo tik tiek bus)

klasės metoduose neturėtų būti echo, nes tai pažeižia MVC principus, Na nebent tai yra jau V dalies realizacija.

Na toliau kaip suprantu viskas čiki? :))
Na konstruktorius bus reikalingas. :))
Pirmojoje klasėje (db) bus, kaip ir minėjau mysql prisijungimai, f-jos dirbti su šiuo, o antrojoje (ten pavadinimas subClass) bus model'is, tai modelį darysiu extend su db klase. :)
O apie jokius echo žinoma, kad negalima net pagalvot, čia tik debug'inimui kol kas. Vėliau viskas keliaus į view--->smarty. :))

18 (edited by xeranas 2011-06-30 11:04:09)

Re: Classes (OOP)

Na priklausomai kam ta klasė skirta, šiaip OOP svarbu loginis objektų išdėstymas ir jų priklausomumas vienas nuo kito. Klasės paveldėmumas turėtu būti tose vietose kur realiai jo reikia, klasės kintamiesiems ir funkcijoms turėtų būti nubrėžta aiški prieinamumo riba. Pas tave visur public, vadinas $test galiu išsiprinti/keisti iš klasės išorės:

$obj = new db();
#niekas nedraudzia man klases $test reiksme pakeisti
$obj->test = 'mano reiksme';
echo $obj->test;
#bet tai yra bloga praktika, nes nera jokios enkapsuliacijos

OOP tai ne sintakse. Darant kokį appsa reiktų braižyti schemas (ant popieriaus ar galvoje) kokia ir kur klasė turėtu stovėti.. ar ji turėtų būti įprasta, abstrakti ar išvis interfeicas tik.. kam bus skirta motininė klasė ir kam jos vaikai.. kas gali 'paliesti' klasės funkcijas.. ir turi būti "it make sense" kodėl pas tave yra taip, o ne kitaip.

Dėl to čia galime maždaug pasakyti kad ar klasės sintakė gera ir ar reikalingas vienas ar kitas kodo gabaliukas, bet ar taikoma OOP'as pas tave iš kelių eilučių nepasakysim..

P.S. Su duombaze galima visai neblogai žaisti su PDO, ten klasė dėl to nesunkiai įlipdysi į OOP'a orientuotą appsa ;)

No warning? No action? I hate this situation!

Re: Classes (OOP)

xeranas wrote:

Na priklausomai kam ta klasė skirta, šiaip OOP svarbu loginis objektų išdėstymas ir jų priklausomumas vienas nuo kito. Klasės paveldėmumas turėtu būti tose vietose kur realiai jo reikia, klasės kintamiesiems ir funkcijoms turėtų būti nubrėžta aiški prieinamumo riba. Pas tave visur public, vadinas $test galiu išsiprinti/keisti iš klasės išorės:

$obj = new db();
#niekas nedraudzia man klases $test reiksme pakeisti
$obj->test = 'mano reiksme';
echo $obj->test;
#bet tai yra bloga praktika, nes nera jokios enkapsuliacijos

OOP tai ne sintakse. Darant kokį appsa reiktų braižyti schemas (ant popieriaus ar galvoje) kokia ir kur klasė turėtu stovėti.. ar ji turėtų būti įprasta, abstrakti ar išvis interfeicas tik.. kam bus skirta motininė klasė ir kam jos vaikai.. kas gali 'paliesti' klasės funkcijas.. ir turi būti "it make sense" kodėl pas tave yra taip, o ne kitaip.

Dėl to čia galime maždaug pasakyti kad ar klasės sintakė gera ir ar reikalingas vienas ar kitas kodo gabaliukas, bet ar taikoma OOP'as pas tave iš kelių eilučių nepasakysim..

P.S. Su duombaze galima visai neblogai žaisti su PDO, ten klasė dėl to nesunkiai įlipdysi į OOP'a orientuotą appsa ;)

Būtinai pasharinsiu galutinį variantą to žaisliuko kurį darau, įdomu bus sužinoti klaidas. :))
Na, PDO kažkada jau esu matęs, tačiau nesinori šiuo metu dar bristi kažkur giliau kol su pačiu OOP nesusitvarkau gerai. :))
O su tais public'ais tai juos taisysiu, nes čia tik principe norėjau parodyti ar teisingai naudotoju pačių kintamųjų, f-jų naudojimą klasėse. :))

20 (edited by md5 2011-06-30 12:34:56)

Re: Classes (OOP)

šiaip siūlau nenaudoti savo rašliavos, o naudoti jau pakurtą, pvz DOCTRINE.
NES jeigu tik biški išmanai SQL - pražūsi kurią nors dieną
Su kiekviena nauja įdėja tu lipdysi kortų namelį. Neturi ką veikti ?
Reikia naudoti jau pakurtus projektus, ty frameworkus. Priprasi, nebenorėsi atprast :)

Esminis gėris, jie yra pakurti pagal tarptautinius standartus, ty - DP, DY, ACID ir t.t. + reikia mokytis iš profesionalų, o ne iš savęs.
O jeigu jau nusprendei pats kurti, tai visvien turi kopijuoti įdėjas ir mintis nuo to, kas nau pakurta, bet tai čia gaunasi sviestas sviestuotas.

Man patinka pasirašyti viską savom rankom, bet aš analizuoju viską, ką tuo monentu noriu padaryti.
Pvz reikėjo man freimworko, tai išsiaiškinau techninę ZF ir Symfony struktūrą nuo iki, ir pasirašiau savo.

Jeigu nori būti geras developeris, privalai skaityti kitų source lygiai taip pat, kaip knygas knygyne ir bandyti pritaikyti sau, arba naudoti kas jau pakurta.

P.S daug moralo, bet tai tik į naudą.

Kiek maigyklių sudėvėjai ?