Jūs neprisijungęs
Aukštyn Tema Programinė įranga / Programinė įranga / paprastas php klasių valdiklis pradedantiesiems
lukoko Data 2006-08-20 18:40
dažnai pradedantys php programuotojai nežino kaip naudoti OOP su php.
na iš timrųjų rašant scenarijus paprastiems puslapiams su svečių knyga procedųrinio programavimo per akis.

didesniem projektam kaip pvz pazinčių portalams gali būti patogu naudoti klases atskirų loginių elementų abstrakcijai: pvz atskiros klases pavyzdžiuoi Vartotojui o veiksmai su vartotoju būtų atskiri metodai tos klases.

Pradedantis programuotojas dažnai neturi supratimo kaip tuos metodus sujungti į vieną bendrą sistemą, čia pateiksiu elementarų pavyzdį.

Esmė būtų iškviesti atitinkamos klasės objektą ir nurodyti kokį metodą jis vykdo. tai galima padaryti perduodant tai per $_GET

index.php

// pats pirmas indekso failas jame nusatomi visi programos nustatymai ir kvieciamas skriptas kuriame ji pradeda vykdyti
// sis failas yra tam kad butu galima visus nustatymus defaininti lengvai randamoje vietoje ir yra skirtas tik nustatymam ir niekam kitam galima sakyt.
<?php
define('DEFAULT_CONTROLLER', 'my');
define('DEFAULT_ACTION', 'veiksmas1');
include('sys/init.php');
?>


layout.php - html failas bendrai svetaines isvaizdai.

layouot.php pradzia<br />
<a href="?controller=my&action=veiksmas1">my::veiksmas1</a><br />
<a href="?controller=my&action=veiksmas2">my::veiksmas2</a><br />
<a href="?controller=lol&action=veiksmas1">lol::veiksmas1</a><br />
<hr />
<?=$content ?>
<hr />
layout.php pabaiga


sys/init.php

<?php
// realiai cia vykdoma programa
//sukuriamas kviestas objektas,
// tada jo metodas ivykdomas
// ir grazinamas gautas tektas
include 'sys/controller.php';
if ($_GET['controller']) $controller= $_GET['controller'];
  else $controller = DEFAULT_CONTROLLER;
if ($_GET['action']) $action= $_GET['action'];
  else $action = DEFAULT_ACTION;
include 'controllers/'.$controller.'.php';
$main = new $controller();
$main->$action();
$content=$main->render(); 
include('layout.php');
?>


sys/controller.php

<?php
// cia yra tevine klase visoms kitoms klasems.
class controller{
  var $tpl;
  var $vars=array();
 
  function setTpl($tpl){
    $this->tpl=$tpl;
  }

    function setVar($key, $value){
    $this->vars[$key]=$value;
  } 
 
  function render(){
    if (isset($this->vars)) foreach ($this->vars as $key=>$val) $$key=$val;
    ob_start();
      include 'views/'.$this->tpl.'.php';
      $text = ob_get_contents();
    ob_end_clean();
    return $text;
  }
}
?>


taigi yra dar dvi klases:
controllers/lol.php

<?
// si klase nieko nedaro tik uzsistato isvesties (template) faila ir ji atvaizduoja
class lol extends controller{
  function veiksmas1(){
    $this->setTpl('trys');
  }
}
?>


sios klases to vienintelio metodo kintamieji perduodami i si faila ir lol::render() metodas gražina šio failo turinį su įstatytais kintamaisiais.
views/trys.php

trys.php pradzia<br />
<h1>333</h1><br />
trys.php pabaiga<br />


ir kita klasė
controllers/my.php

<?
class my extends controller{
  function veiksmas1(){
    $this ->setVar('kint','blet');
    $this->setTpl('vienas');
  }
  function veiksmas2(){
    $db=array('firefox', 'opera', 'ie6', 'konqueror');//cia atseit kazka istraukiam is duombazes
    $this ->setVar('lentele',$db);
    $this->setTpl('du');
  } 
}
?>


bei jos metodų templetukai:
views/vienas.php

vienas.php pradzia<br />
<?=$kint ?><br />
vienas.php pabaiga<br />


ir
views/du.php

du.php pradzia<br />
<ol>
<?php foreach($lentele as $row): ?>
  <li>
    <?=$row ?>
  </li>
<?php endforeach; ?>
</ol>
du.php pabaiga <br />


antroji klase pirmame metode atvaizduoja nustatyta kintamaji templete faile antrame metode uzstatomas kintamasis - masyvas ir yra atviazduojamas templete faile.

duotos sistemėlės pliusai:
+ atskiriama logika nuo html.
+ kiekvienas veiksmas turi atskira metoda, o veiksmu grupes sujungtos i klases

vistik cia yra tik primityvus pavyzdys ir realiam gyvenime tokią sistemą sunku bepanaudot todėl jei domina OOP su php patariu paskaitinėti čia:

1) http://en.wikipedia.org/wiki/Model-view-controller
2) http://cakephp.org/
3) http://www.clawphp.org/
Aukštyn Tema Programinė įranga / Programinė įranga / paprastas php klasių valdiklis pradedantiesiems

Powered by mwForum 2.29.6 © 1999-2015 Markus Wichitill