variabelen uitlijnen?
Al meerdere malen loop ik hier tegenaan en ik ben benieuwd hoe jullie dit doen. Als je een aantal variabelen onder elkaar zet, lijn je deze dan netjes uit of niet?
Dus doe je gewoon dit:
Code (php)
1
2
3
4
5
2
3
4
5
<?php
$name = $user->getName();
$age = $user->getAge();
$gender = $user->getGender();
?>
$name = $user->getName();
$age = $user->getAge();
$gender = $user->getGender();
?>
Of doe je dit?
Code (php)
1
2
3
4
5
2
3
4
5
<?php
$name = $user->getName();
$age = $user->getAge();
$gender = $user->getGender();
?>
$name = $user->getName();
$age = $user->getAge();
$gender = $user->getGender();
?>
De laatste optie ziet er mooier uit, maar kost meer werk. De ene keer denk ik, ik doe het allemaal netjes. Dan denk ik weer, nee toch maar niet... en dan even later denk ik... toch maar wel :-)
Maar als ik het in PHP netjes doe, dan zou ik het in m'n css bestanden bijvoorbeeld ook netjes moeten doen... en dat is helemaal een boel werk! Dan zou je zoiets krijgen:
Code (php)
1
2
3
4
5
6
2
3
4
5
6
.eenclass {
border : 1px solid red;
height : 100%;
margin-left: 15px;
width : 500px;
}
border : 1px solid red;
height : 100%;
margin-left: 15px;
width : 500px;
}
Kortom, ik ben benieuwd of jullie je variabelen wel of niet uitlijnen..!
Maar let wel dat dit natuurlijk alleen voor jezelf is, het hoort uiteindelijk te werken en ziet in principe niemand die code :D
Nee, ben ik met je eens... maar het leest wel makkelijker. Echter, als je dus consequent wil zijn, zou je het in je css code eigenlijk ook moeten doen en da's zo'n boel werk!
In 'indent' wel de HTML zo goed mogelijk.
Dus dit:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<!DOCTYPE html>
<html>
<head>
<!-- Title -->
<title>Overzicht • HGBH</title>
<!-- Meta informatie, and Charset-->
<meta http-equiv="cache-control" content="public">
<meta charset="ISO-8859-15">
<meta name="robots" content="all">
<meta name="copyright" content="© 2011 Hervormde Gemeente Boven-Hardinxveld en diens vertegenwoordigers">
<meta name="description" content="Website van de Hervormde Gemeente te Boven-Hardinxveld">
<meta name="keywords" content="Hervormde, Gemeente, Boven-Hardindxveld, Hardinxveld, Kerk, Hervormd, PKN, Gereformeerde, Bond" >
<meta name="viewport" content="width=device-width">
<!-- Base href -->
<base href="http://www.hervormdegemeentebovenhardinxveld.nl">
<!-- Cascade Style Sheet -->
<link href="css/algemeen.css" rel="stylesheet" type="text/css" media="all">
<link href="css/overzicht.css" rel="stylesheet" type="text/css" media="all">
<!-- Javascript -->
<script src="./js/jquery-1.7.2.min.js"></script>
</head>
<body>
<div id="container">
<div id="header"></div>
<h1 class="print_only">Overzicht • HGBH</h1>
<nav id="menu" class="screen_only">
<html>
<head>
<!-- Title -->
<title>Overzicht • HGBH</title>
<!-- Meta informatie, and Charset-->
<meta http-equiv="cache-control" content="public">
<meta charset="ISO-8859-15">
<meta name="robots" content="all">
<meta name="copyright" content="© 2011 Hervormde Gemeente Boven-Hardinxveld en diens vertegenwoordigers">
<meta name="description" content="Website van de Hervormde Gemeente te Boven-Hardinxveld">
<meta name="keywords" content="Hervormde, Gemeente, Boven-Hardindxveld, Hardinxveld, Kerk, Hervormd, PKN, Gereformeerde, Bond" >
<meta name="viewport" content="width=device-width">
<!-- Base href -->
<base href="http://www.hervormdegemeentebovenhardinxveld.nl">
<!-- Cascade Style Sheet -->
<link href="css/algemeen.css" rel="stylesheet" type="text/css" media="all">
<link href="css/overzicht.css" rel="stylesheet" type="text/css" media="all">
<!-- Javascript -->
<script src="./js/jquery-1.7.2.min.js"></script>
</head>
<body>
<div id="container">
<div id="header"></div>
<h1 class="print_only">Overzicht • HGBH</h1>
<nav id="menu" class="screen_only">
Etc.
In CSS spring ik in als het erbij hoort, dus net een mappen-structuur:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#footer
{
margin-top: -50px;
padding: 0;
height: 360px;
background: url(afbeeldingen/achtergrondfooter.png) top left no-repeat;
margin-left: 0px;
width: 962px;
overflow: hidden;
}
#footer p
{
display: block;
float: left;
width: 200px;
margin: 0;
padding: 0;
color: #000;
padding-top:140px;
}
#footer p.knoppen
{
display: block;
position: relative;
top: 115px;
right: 10px;
margin: 0;
padding: 0;
float: right;
}
#footer p.knoppen a
{
display: block;
float: right;
height: 38px;
width: 32px;
overflow: hidden;
text-indent: -9999px;
margin: 0;
padding: 0;
background-position: 0px 3px;
background-repeat: no-repeat;
margin-left: -10px;
background: url(afbeeldingen/iconen/ZW/sprite.png) top left no-repeat;
}
#footer p.knoppen #boven
{
background-position: 0px -64px;
}
#footer p.knoppen #zoom
{
background-position: 0px -384px;
}
{
margin-top: -50px;
padding: 0;
height: 360px;
background: url(afbeeldingen/achtergrondfooter.png) top left no-repeat;
margin-left: 0px;
width: 962px;
overflow: hidden;
}
#footer p
{
display: block;
float: left;
width: 200px;
margin: 0;
padding: 0;
color: #000;
padding-top:140px;
}
#footer p.knoppen
{
display: block;
position: relative;
top: 115px;
right: 10px;
margin: 0;
padding: 0;
float: right;
}
#footer p.knoppen a
{
display: block;
float: right;
height: 38px;
width: 32px;
overflow: hidden;
text-indent: -9999px;
margin: 0;
padding: 0;
background-position: 0px 3px;
background-repeat: no-repeat;
margin-left: -10px;
background: url(afbeeldingen/iconen/ZW/sprite.png) top left no-repeat;
}
#footer p.knoppen #boven
{
background-position: 0px -64px;
}
#footer p.knoppen #zoom
{
background-position: 0px -384px;
}
(ingekorte versie).
In PHP declareer ik mijn variabelen gewoon zo:
Code (php)
1
2
3
4
5
2
3
4
5
<?php
$name = $user->getName();
$age = $user->getAge();
$gender = $user->getGender();
?>
$name = $user->getName();
$age = $user->getAge();
$gender = $user->getGender();
?>
(dus geen gezeur met inspringen)
Da's apart met dat inspringen in css. Dat heb ik nog nooit gezien.
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
<?php
//even maar iets verzonnen
if($_SERVER['REQUEST_METHOD'] == 'POST') {
$naam = $_POST['naam'];
$adres = $_POST['adres'];
$geboortedatum = $_POST['geboortedatum'];
}
?>
//even maar iets verzonnen
if($_SERVER['REQUEST_METHOD'] == 'POST') {
$naam = $_POST['naam'];
$adres = $_POST['adres'];
$geboortedatum = $_POST['geboortedatum'];
}
?>
In mijn CSS code doe ik iets gelijkaardig. Bij HTML heb je eigenlijk niet zo veel manieren om in te springen, is allemaal vrij logisch hoe je daar inspringt.
Wat ik wel vaak doe, nadat het project klaar is zeg maar is het volgende: Ik maak een kopie van de bestanden en ik minify de CSS code en JS code. De HTML-code niet. Want het is altijd handig om even snel in de broncode iets te kunnen zoeken. Terwijl dat in de CSS code minder voorkomend is. Tenzij je natuurlijk van iemand anders stukjes wilt rippen :+
Bij een array doe ik het wel om er voor te zorgen dat het gemakkelijker te lezen is.
Write Down op 21/08/2012 10:54:51:
Ik doe het half en half. Ik maak zeker en vast gebruik van inspringingen, bv:
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
<?php
//even maar iets verzonnen
if($_SERVER['REQUEST_METHOD'] == 'POST') {
$naam = $_POST['naam'];
$adres = $_POST['adres'];
$geboortedatum = $_POST['geboortedatum'];
}
?>
//even maar iets verzonnen
if($_SERVER['REQUEST_METHOD'] == 'POST') {
$naam = $_POST['naam'];
$adres = $_POST['adres'];
$geboortedatum = $_POST['geboortedatum'];
}
?>
Zo zou ik het ook ongeveer doen, alleen dan zo:
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
<?php
//even maar iets verzonnen
if($_SERVER['REQUEST_METHOD'] == 'POST') {
$naam = $_POST['naam'];
$adres = $_POST['adres'];
$geboortedatum = $_POST['geboortedatum'];
}
?>
//even maar iets verzonnen
if($_SERVER['REQUEST_METHOD'] == 'POST') {
$naam = $_POST['naam'];
$adres = $_POST['adres'];
$geboortedatum = $_POST['geboortedatum'];
}
?>
Toevoeging op 21/08/2012 12:37:35:
Ook nog een leuke...
Doe je dit:
Code (php)
of
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
<?php
$user = 'Piet';
if ($iets) {
// code
// code
// code
// nog meer code...
$user = $data;
}
?>
$user = 'Piet';
if ($iets) {
// code
// code
// code
// nog meer code...
$user = $data;
}
?>
Ozzie PHP op 21/08/2012 12:23:55:
Zo zou ik het ook ongeveer doen, alleen dan zo:
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
<?php
//even maar iets verzonnen
if($_SERVER['REQUEST_METHOD'] == 'POST') {
$naam = $_POST['naam'];
$adres = $_POST['adres'];
$geboortedatum = $_POST['geboortedatum'];
}
?>
//even maar iets verzonnen
if($_SERVER['REQUEST_METHOD'] == 'POST') {
$naam = $_POST['naam'];
$adres = $_POST['adres'];
$geboortedatum = $_POST['geboortedatum'];
}
?>
Dit ziet er zo netjes uit, omdat dit korte statements en declaraties zijn. Maar wordt het straks wat langer en uitgebreider krijg je een hele andere situatie.
Het is uiteindelijk een persoonlijke smaak van schrijven, en hoe je het zelf het liefst leest. Ik probeer onnodige whitespaces zoveel mogelijk te vermijden in php scripts, uiteraard heeft dit geen invloed op de werking van het script. Maar ik vind een script dat 30 regels heeft, waarvan 15 witregels een beetje te :D
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
//even maar iets verzonnen
if($_SERVER['REQUEST_METHOD'] == 'POST') {
$naam = $_POST['naam'];
$adres = $_POST['adres'];
$geboortedatum = $_POST['geboortedatum'];
// nog wat code...
// nog wat code...
// nog wat code...
// nog wat code...
$huisnummer = $_POST['huisnummer'];
$adres = $_POST['adres'];
$land = $_POST['land'];
}
?>
//even maar iets verzonnen
if($_SERVER['REQUEST_METHOD'] == 'POST') {
$naam = $_POST['naam'];
$adres = $_POST['adres'];
$geboortedatum = $_POST['geboortedatum'];
// nog wat code...
// nog wat code...
// nog wat code...
// nog wat code...
$huisnummer = $_POST['huisnummer'];
$adres = $_POST['adres'];
$land = $_POST['land'];
}
?>
Gewijzigd op 21/08/2012 12:48:57 door Ozzie PHP
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php
# even maar iets verzonnen
if($_SERVER['REQUEST_METHOD'] == 'POST') {
# bla bla bla.
$naam = $_POST['naam'];
# bla bla bla.
$adres = $_POST['adres'];
# bla bla bla.
$geboortedatum = $_POST['geboortedatum'];
}
?>
# even maar iets verzonnen
if($_SERVER['REQUEST_METHOD'] == 'POST') {
# bla bla bla.
$naam = $_POST['naam'];
# bla bla bla.
$adres = $_POST['adres'];
# bla bla bla.
$geboortedatum = $_POST['geboortedatum'];
}
?>
@ Ozzie's tweede vraag, Ik ga voor optie 2.
Ah, oké optie 2 gebruik ik ook vaak inderdaad. Toch wel typisch hoe iedereen alles anders lijkt te doen :)
Als ik zo codeer is mijn code in elk geval zo, zoals de "rest" van de wereld ook codeert.
Wat dan ook wel handig is, is als ik een ) } o.i.d vergeten ben de opmaak er dam meteen heel raar uitziet.
Zeker als ik op mijn laptop (zoals nu) zit, dan vult dit (in de hoogte dan) pakweg 50% van mijn scherm. (en dat is toch al 17") Op mijn desktop kan ik het iets beter verdragen, maar ja 24"...
Verder vind ik nog een ander nadeel: minder samenhorigheid. Ik weet wel dat die code bij mekaar hoort, maar als je het wat dichter bij mekaar zet is het gelijk veel duidelijker.
Overigens hou ik de comments altijd gelijk met de overige lijnen. Dus niet die #blabla op gelijke hoogte van de if.
Ik zie ook veel mensen hier die tussen bv. een if en hun accolade een spatie hebben staan. Is ook iets wat ik nooit doe :-)
Maar ja, ieder zijn stijl!
Al denk ik wel dat we het er allemaal over eens zijn dat er zeker wat inspringingen en enters moeten zijn.
Quote:
Ik zie ook veel mensen hier die tussen bv. een if en hun accolade een spatie hebben staan. Is ook iets wat ik nooit doe :-)
Dat doe ik normaal ook niet, copy & paste foutje dat ik over het hoofd heb gezien.
Doordat ik veel witregel gebruik worden mijn script vaak erg lang ja. Scrollen vind ik niet zo'n probleem zolang het alleen maar vertikaal is. Mijn laptop is maar 11,6 inch en zelfs dan heb ik er geen problemen mee op mijn manier. Voor langere dagen sluit ik er dan wel een externe monitor op aan.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<?php
# even maar iets verzonnen
if($_SERVER['REQUEST_METHOD'] == 'POST'){
# bla bla bla.
$naam = $_POST['naam'];
# bla bla bla.
if($whatever == 'something'){
# bla bla bla.
$adres = $_POST['adres'];
}
# bla bla bla.
if($something == 'whatever'){
# bla bla bla.
$geboortedatum = $_POST['geboortedatum'];
}
}
?>
# even maar iets verzonnen
if($_SERVER['REQUEST_METHOD'] == 'POST'){
# bla bla bla.
$naam = $_POST['naam'];
# bla bla bla.
if($whatever == 'something'){
# bla bla bla.
$adres = $_POST['adres'];
}
# bla bla bla.
if($something == 'whatever'){
# bla bla bla.
$geboortedatum = $_POST['geboortedatum'];
}
}
?>
Ik heb eigenlijk een vrij blokkerigge manier van scripten. Je kunt de blokken onderscheiden door te kijken naar de dubbele witregel.
Gewijzigd op 21/08/2012 17:24:41 door - Mark -
Ik gebruik de bovenste manier. Anders kost het veel te veel tijd ;-) Af en toe doe ik het wel met arrays maar waarom weet ik eigenlijk niet. (Terwijl ik eigenlijk wel altijd van de consistentie ben)
@eddy
Hebben we daar geen commentaar voor uit gevonden? Maak via de comment tags afscheiden aan. (Ik heb het nu over je CSS bestand)
@ozzie
Over die variabelen, soms zet ik bepaalde acties in variabelen en sommige niet.
Bijvoorbeeld, ik heb een object, genaamd `Banner`, wat een representatie van een row (uit een database tabel) is.
Aan een banner kunnen (image) areas, en artikelen gekoppeld zodat je een mooie image map kan maken. (denk er even aan dat je in de view zit, het banner object is naar de view geparsed)
Dat kan op twee manieren:
1:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<div class="banner">
<img src="<?php echo $this->banner->src_1 ?>" alt="<?php echo (string) $this->escape($this->banner) ?>" usemap="map_<?php echo (int) $this->banner->banner_id ?>" />
<?php if (count($this->banner->getAreas()) > 0): ?>
<map name="map_<?php echo (int) $this->banner->banner_id ?>">
<?php foreach ($this->banner->getAreas() as $area): ?>
<area shape="<?php echo $this->banner->shape ?>" coords="<?php echo $this->banner->coords ?>" href="<?php echo $this->escape($area->href) ?>" alt="<?php echo (string) $this->escape($area) ?>" />
<?php endforeach; ?>
</map>
<?php endif; ?>
</div>
<?php if (count($this->banner->getArticles()) > 0): ?>
<div class="banner-articles">
<?php foreach ($this->banner->getArticles() as $article): ?>
<div class="article">
<a href="<?php echo $this->url(array('article_id' => (int) $article->article_id, 'seotag' => $article->getSimplifyArticleName()), 'article') ?>" title="<?php echo (string) $this->escape($article) ?>">
<?php echo (string) $this->escape($this->article) ?>
</a>
<!-- overige elementen zoals afbeelding / prijs etc -->
</div>
<?php endforeach; ?>
</div>
<?php endif; ?>
<img src="<?php echo $this->banner->src_1 ?>" alt="<?php echo (string) $this->escape($this->banner) ?>" usemap="map_<?php echo (int) $this->banner->banner_id ?>" />
<?php if (count($this->banner->getAreas()) > 0): ?>
<map name="map_<?php echo (int) $this->banner->banner_id ?>">
<?php foreach ($this->banner->getAreas() as $area): ?>
<area shape="<?php echo $this->banner->shape ?>" coords="<?php echo $this->banner->coords ?>" href="<?php echo $this->escape($area->href) ?>" alt="<?php echo (string) $this->escape($area) ?>" />
<?php endforeach; ?>
</map>
<?php endif; ?>
</div>
<?php if (count($this->banner->getArticles()) > 0): ?>
<div class="banner-articles">
<?php foreach ($this->banner->getArticles() as $article): ?>
<div class="article">
<a href="<?php echo $this->url(array('article_id' => (int) $article->article_id, 'seotag' => $article->getSimplifyArticleName()), 'article') ?>" title="<?php echo (string) $this->escape($article) ?>">
<?php echo (string) $this->escape($this->article) ?>
</a>
<!-- overige elementen zoals afbeelding / prijs etc -->
</div>
<?php endforeach; ?>
</div>
<?php endif; ?>
2:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<div class="banner">
<img src="<?php echo $this->banner->src_1 ?>" alt="<?php echo (string) $this->escape($this->banner) ?>" usemap="map_<?php echo (int) $this->banner->banner_id ?>" />
<?php $areas = $this->banner->getAreas() ?>
<?php if (count($areas) > 0): ?>
<map name="map_<?php echo (int) $this->banner->banner_id ?>">
<?php foreach ($areas as $area): ?>
<area shape="<?php echo $this->banner->shape ?>" coords="<?php echo $this->banner->coords ?>" href="<?php echo $this->escape($area->href) ?>" alt="<?php echo (string) $this->escape($area) ?>" />
<?php endforeach; ?>
</map>
<?php endif; ?>
</div>
<?php $articles = $this->banner->getArticles() ?>
<?php if (count($articles) > 0): ?>
<div class="banner-articles">
<?php foreach ($articles as $article): ?>
<div class="article">
<a href="<?php echo $this->url(array('article_id' => (int) $article->article_id, 'seotag' => $article->getSimplifyArticleName()), 'article') ?>" title="<?php echo (string) $this->escape($article) ?>">
<?php echo (string) $this->escape($this->article) ?>
</a>
<!-- overige elementen zoals afbeelding / prijs etc -->
</div>
<?php endforeach; ?>
</div>
<?php endif; ?>
<img src="<?php echo $this->banner->src_1 ?>" alt="<?php echo (string) $this->escape($this->banner) ?>" usemap="map_<?php echo (int) $this->banner->banner_id ?>" />
<?php $areas = $this->banner->getAreas() ?>
<?php if (count($areas) > 0): ?>
<map name="map_<?php echo (int) $this->banner->banner_id ?>">
<?php foreach ($areas as $area): ?>
<area shape="<?php echo $this->banner->shape ?>" coords="<?php echo $this->banner->coords ?>" href="<?php echo $this->escape($area->href) ?>" alt="<?php echo (string) $this->escape($area) ?>" />
<?php endforeach; ?>
</map>
<?php endif; ?>
</div>
<?php $articles = $this->banner->getArticles() ?>
<?php if (count($articles) > 0): ?>
<div class="banner-articles">
<?php foreach ($articles as $article): ?>
<div class="article">
<a href="<?php echo $this->url(array('article_id' => (int) $article->article_id, 'seotag' => $article->getSimplifyArticleName()), 'article') ?>" title="<?php echo (string) $this->escape($article) ?>">
<?php echo (string) $this->escape($this->article) ?>
</a>
<!-- overige elementen zoals afbeelding / prijs etc -->
</div>
<?php endforeach; ?>
</div>
<?php endif; ?>
Het enige verschil in de bovenstaande codes is regel 3 en 13. Hoezo doe ik dit? Daarvoor moeten we eerst even naar de functies getAreas() en getAricles() op het Banner object bekijken. (Zie onderstaande codes)
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<?php
class Application_Model_Banner extends Zend_Db_Table_Row {
public function getAreas() {
return $this->findDependentRowset('Application_Model_DbTable_BannerArea');
/**
Lees dit als:
SELECT area_id, title, shape, coords, href
FROM banner_area
WHERE banner_id = 1
**/
}
public function getArticles() {
return $this->findDependentRowset('Application_Model_DbTable_BannerArticles');
/**
Lees dit als:
SELECT
article_id, title, enz ............
FROM banner_articles AS ba
JOIN article AS a ON a.article_id = ba.article_id
JOIN article_size AS as ON as.article_id = a.article_id
WHERE ba.banner_id = 1
AND as.stock > 0
AND a.active = 'yes'
AND a.src_1 IS NOT NULL
enz enz enz
**/
}
}
?>
class Application_Model_Banner extends Zend_Db_Table_Row {
public function getAreas() {
return $this->findDependentRowset('Application_Model_DbTable_BannerArea');
/**
Lees dit als:
SELECT area_id, title, shape, coords, href
FROM banner_area
WHERE banner_id = 1
**/
}
public function getArticles() {
return $this->findDependentRowset('Application_Model_DbTable_BannerArticles');
/**
Lees dit als:
SELECT
article_id, title, enz ............
FROM banner_articles AS ba
JOIN article AS a ON a.article_id = ba.article_id
JOIN article_size AS as ON as.article_id = a.article_id
WHERE ba.banner_id = 1
AND as.stock > 0
AND a.active = 'yes'
AND a.src_1 IS NOT NULL
enz enz enz
**/
}
}
?>
Zoals je ziet wordt er bij elke methode een query uitgevoerd (wel even op de zend manier, maar het gaat even om het idee). Dus, elke keer wanneer je die methode aanroept wordt die query uitgevoerd. Dat is de reden waarom ik bepaalde functionaliteit in variabeles zet. Deze query's zijn nog niet heel bijzonder maar join er maar eens een categorie, merk, kleur etc bij, en tot slot nog wat filtering voor voorraad locaties en al die zooi. (is slecht als je dat allemaal gedecentraliseerd regelt, maar het gaat natuurlijk even om het idee)
Als je dan die methode 4 of 5 om misschien wel 10 keer ergens aanroept, (gaat heel snel vergis je niet, denk bijvoorbeeld aan webshop filtering) dan wordt 10 keer die query aangeroepen / uitgevoerd en verwerkt. Dat ga je wel merken in de performance.
Een andere oplossing is het in het object oplossen. Zie onderstaand voorbeeld:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?php
class Application_Model_Banner extends Zend_Db_Table_Row {
private $areas;
private $articles;
public function getAreas() {
if (!$this->areas instanceof Zend_Db_Table_Rowset_Abstract) { // even op de zend manier, je kan natuurlijk ook checken of het een array is
$this->areas = $this->findDependentRowset('Application_Model_DbTable_BannerArea');
}
return $this->areas;
}
public function getArticles() {
if (!$this->articles instanceof Zend_Db_Table_Rowset_Abstract) { // even op de zend manier, je kan natuurlijk ook checken of het een array is
$this->articles = $this->findDependentRowset('Application_Model_DbTable_BannerArticles');
}
return $this->articles;
}
}
?>
class Application_Model_Banner extends Zend_Db_Table_Row {
private $areas;
private $articles;
public function getAreas() {
if (!$this->areas instanceof Zend_Db_Table_Rowset_Abstract) { // even op de zend manier, je kan natuurlijk ook checken of het een array is
$this->areas = $this->findDependentRowset('Application_Model_DbTable_BannerArea');
}
return $this->areas;
}
public function getArticles() {
if (!$this->articles instanceof Zend_Db_Table_Rowset_Abstract) { // even op de zend manier, je kan natuurlijk ook checken of het een array is
$this->articles = $this->findDependentRowset('Application_Model_DbTable_BannerArticles');
}
return $this->articles;
}
}
?>
Zoals ik in het beveiliging topic al zei moet je heel goed nadenken over het gene wat je schrijft en wat de (mogelijke) gevolgen daarvan kunnen zijn.
Mee eens?
Niels
Gewijzigd op 21/08/2012 18:48:46 door Niels K
Altijd weer leuk zo'n uitgebreid bericht. Ja, ben t er wel mee eens. Maar soms betrap ik me erop dat ik dingen niet consistent doen en dat vind ik lelijk. Dan laat ik het punt van performance nogeven buiten beschouwing, maar als het de performance ten goede komt dan is het inderdaad beter om de consistentie even opzij te zetten.
Maar soms ben ik volop code aan het schrijven en doe ik het ene moment dit:
en even later schrijf ik precies een zelfde stukje code, maar dan zo:
En waarom ik dan het ene moment voor optie 1 kies en het andere moment voor optie 2... geen idee? Dat gebeurt dan in de snelheid van het coderen. En achteraf baal ik daar dan van... ik wil het allemaal consistent hebben.
Maar ik wil dit soort dingen eruit krijgen, want ik vind het niet mooi. Ik wil voor de consistentie gaan!
Gewijzigd op 21/08/2012 21:18:39 door Ozzie PHP
Ja ook ik heb af en toe eens tijd om weer te reageren -_- (druk druk druk)
Quote:
Ja, ben t er wel mee eens. Maar soms betrap ik me erop dat ik dingen niet consistent doen en dat vind ik lelijk
Ligt totaal aan de situatie denk ik? Soms is het performance-technisch gezien beter om even van het normale pad af te gaan.
Over je stukjes code:
Probeer (wanneer) mogelijk altijd optie 1 te gebruiken. Daarnaast werkt het ook als je andere mensen naar je code laat kijken. (wel ervaren mensen dan ;-)) Dan is vanuit beveiliging oogpunt ook aan te raden.
Quote:
Maar ik wil dit soort dingen eruit krijgen, want ik vind het niet mooi. Ik wil voor de consistentie gaan!
Succes!
Waarom zou je altijd zo veel mogelijk voor optie 1 gaan?
Toevoeging op 22/08/2012 21:03:33:
Niels Kieviet op 22/08/2012 20:54:11:
Ja ook ik heb af en toe eens tijd om weer te reageren -_- (druk druk druk)
Ja, er ligt nog iets op je te wachten! klik
Allereerst kost het 1 regel minder, en je hebt gewoon geen else nodig. Dat zorgt er weer voor dat je code beter te lezen is.
Quote:
Ja, er ligt nog iets op je te wachten! ...
Ja ik weet het, en schaam me eigen ook kapot maar heb gewoon geen tijd. Mijn nieuwe versie van nielskieviet.nl moest (volgens de planning) ook al 3 maanden geleden live maar ik heb hem alleen nog maar getemplated :(
Als jij nu eens Zend framework specialist was :D
rustig aan... en genoeg water drinken ;-)