Jump to content
php.lv forumi

HTML atdalīts no PHP


daGrevis

Recommended Posts

Tik tikko atkal apguvu sintaksi objektiem. Izgāju cauri šim - http://www.phpro.org/tutorials/Object-Oriented-Programming-with-PHP.html, nedaudz paeksperimentēju. =)

 

Pietam runāju ar vienu jaunu programmētāju (tādu paši kā Es) par to, ko viņš domā par objektiem. Secinājums tāds, ka Mēs abi nesaprotam kā tagad objekti ir jāizmanto praksē...!

 

Lūk piemērs iz dzīves. Vēlos izveidot vienkāršu lietotāju sistēmu. Pirms tam tas bija apmēram tā...

 

Reģistrācija:

 

Fails, kurā ir HTML formas ar "username", "password" laukiem.

Ar POST metodi info tiek padots tālāk uz citu failu kurā tiek validēti dati...

Ja dati ir ok, tad saglabājam tos datubāzē + izvadam, ka reģistrācija veiksmīga. Pretēja gadījumā izvadām kļūdu.

 

Ielogošanās:

 

Fails, kurā ir HTML formas ar "username", "password" laukiem.

Ar POST metodi info tiek padots tālāk uz citu failu kurā tiek validēti dati + pārbaudīts, vai "username"/"password" kombo der...

Ja dati ir ok, tad saglabājam sesiju, ka lietotājs ir ielogojies + izvadam, ka ielogošanās veiksmīga. Pretēja gadījumā izvadām kļūdu.

 

Jebkura lapa ar ielogošanās nepieciešamību:

 

if( isSet( $_SESSION['signed_in'] ) ) {}

 

 

Kā tas izskatās ar OO? =)

 

P.S. Atvainojos par Saviem dažiem stulbajiem bez sakarīgajiem postiem.

Link to comment
Share on other sites

  • 2 weeks later...

Nuuu ... es darītu apmēram šitā.

 


class Template{

protected $_path;
protected $_pool = array();

public function __construct( $path ){
	$this->_path = $path;
}

public function render(){

	extract ( $this->_pool , EXTR_OVERWRITE );

	ob_start();

	try{
		include  $this->_path;
	}catch( Exception $e ){
		ob_end_clean();
		throw $e;
	}

	return ob_get_clean();

}

public function assign( $name , $variable ){
	$this ->_pool[$name] =  $variable;			
}

};

 

Sapratu kā pielietot, tik stulbs neesmu. =)

 

Nesapratu, vai tāds variants (runāju par metodi render()) ir ātrāks (varbūt labāks?) par...

 

$a = 'value1';
$b = 'value2';
$c = 'value3';

require 'templates/index.php';

 

...un pēc tam pa tiešo mainīgos izvadam. =) Gribu dzirdēt plusus un mīnusus, lūdzu. Tikai mācos.

 

Pietam, ja godīgi, nesapratu precīzi ko tā funkcija dara ar datiem, jo neesmu saskāries ar extract() vai ob...(), un try {} catch {}... =[

Link to comment
Share on other sites

Pluss taads, ka tur var likt iekshaa logjiku, kas atbild tikai par templeitiem, piemeeram:

 

class Template {
 public function __construct($path) {
   if(!file_exists(TEMPLATE_PATH . $path))
     throw new TemplateNotFoundException("Template '$path' wasn't found");
 }

 ...
}

 

Tiesa es netaisiitu taadaa veidaa, bet gan nedaudz savaadaak.

 

Eniivei: http://en.wikipedia.org/wiki/Abstraction_(computer_science)

Edited by rATRIJS
Link to comment
Share on other sites

Ja vien tu esi tam gatavs, tad silti iesaku palasīt un izkost kādu grāmatu no sērijas par "php design patterns", kaut vai šo:

http://www.amazon.com/PHP-Architects-Guide-Design-Patterns/dp/0973589825

 

Ja vien iedziļināsies grāmatas saturā, tad arī viss nostāsies savās vietās un sapratīsi pasākuma jēgu. Taisīt klases tikai tāpēc, lai tu varētu CV ierakstīt, ka proti OOP ir lieki.

Link to comment
Share on other sites

Kā lai paskaidro cilvekam, kurš nezin, kas ir abstrakcija !?

Jā tavs variants noteikti būtu ātrāks ( ļoti, ļoti nedaudz , bet pilnīgi noteikti ātraks ). Bet tas īsti nav mērķis.

Doma ir izveidot struktūru, kas saņem jebkādu skaitu vērtību , ar jebkādiem nosaukumiem un ievieto tos templeitā tadā veidā, lai tās neietekmētu pārējo kodu.

 

Ņem par piemēru to tavu kodu.

Viss ir ok, ja tev ir viens tāds fails, bet kas notiek ja tev ir 40 templeiti ? Tad tev papildus templeitiem ir vēl vismaz 40 tādu failu.

Šinī gadījumā abstrakcija ir veidota visiem šiem 40+ failiem, un spēj realizēt tos visus.

Link to comment
Share on other sites

umm, varbut autajums ne pa temu, bet cik loti ir nepieciesams izmantot tos ob un ka ir pareizak? Parasti piemeros, kad rendere, tad ir ob_start(); un pectam beigas ob_get_clean(); Es agrak dariju ta, ka idex.php sakuma liku ob_start(); un tad beigas ob_flush(); Tas ari bija viss, ko no ob izmantoju.. Help, apskaidro kads mani vairak..

Link to comment
Share on other sites

Ja autora mēŗkis bij vienkārši strukturēt kodu, tad bez oop... (mana mvc parodija)

failu struktura:

/includes/controller/test.php //php (logika)
/includes/view/template1/test.php //html+php variabli (skats) 
/includes/functions.php //visas funkcijas, un darbs ar datu bazi (kautkas lidzigs modelim)
/index.php

 

index.php

<?php 
require_once "./includes/functions.php";
switch($page) {
case 'test': $include='test.php'; break;
}
require_once "./includes/controller/$include";
?>
<html>
<head></head>
<body>
<?php require_once "./includes/view/template1/$include"; ?>
</body>

functions.php

function user_add($name) {
//mysql
}

/controller/test.php

if(isset($_POST['user'])) {
//validate user
user_add();
header(); //nekads izvads uz brovseri nav, taka var mierigi sutit ari hederus, piemram uz lapu "lietojs veiksmigi pievienots";
}

/view/template1/test.php

<h1>jauns lietotajs</h1>
<form action="" method="post">
...
</form>
<?=$kautkas_no_controller;?>

 

Visaz man palidz kodu sastrukturet daudz parskatamak un ertak, rezultata viss liekas ari vienkarshak.

* darbs ar datu bazi tiaki caur funkcijam. funkciju nosaukumi logiski izveidoti, piemeram ja darbs ar lietotaju tad user_add, user_mod, user_delete, user_list, user_single utt.

* visas logika, datu apstrade, validacija utt. controller daļā, bez neviena satura izvada, visu glabajam mainigajos.

* html un mainigo izvads tikai view dalaa. tai skaita kludu zinojumi utt.

Edited by Blitz
Link to comment
Share on other sites

Es iztieku bez visādiem ob_, vnk iekļauju skata failu pašās beigās un ekstraktorju kontrolierī savāktos mainīgos:

Vienkāršā gadījumā tā var darīt, bet ja vajadzīgs būvēt hirearhālu sistēmu, kur tev ir viens templeits un tā saturs ir jāiekļauj pa vidu cita kontrolera templeitam. Tad šis variants nederēs.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...