Hallo,

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:

<?php
$name = $user->getName();
$age = $user->getAge();
$gender = $user->getGender();
?>

Of doe je dit?

<?php
$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:


.eenclass {
  border     : 1px solid red;
  height     : 100%;
  margin-left: 15px;
  width      : 500px;
}


Kortom, ik ben benieuwd of jullie je variabelen wel of niet uitlijnen..!
Hehe... mja is op zich ook overzichtelijk.

Ah, oké optie 2 gebruik ik ook vaak inderdaad. Toch wel typisch hoe iedereen alles anders lijkt te doen :)
Ik gebruik NetBeans om mijn code te schrijven Daar heb je de optie Source->Format. Default wordt daar de code opgemaakt volgens de "best practice". Je kunt dan daar nog van afwijken, maar dat doe ik maar heel beperkt.

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.
Dat van Mark vind ik persoonlijk vervelend. Als ik zo veel witruimte zie, kriebelen mijn vingers. Gelijk backspace en delete werk.

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.

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.


<?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'];
            }

        }

?>


Ik heb eigenlijk een vrij blokkerigge manier van scripten. Je kunt de blokken onderscheiden door te kijken naar de dubbele witregel.
@ozzie

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:


<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; ?>


2:


<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; ?>



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)

<?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
**/
}
}

?>

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:

<?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;
}
}

?>

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



Hey Niels,

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:

<?php
$iets = 'bla';
if (true) {
$iets = 'blabla';
}
?>

en even later schrijf ik precies een zelfde stukje code, maar dan zo:

<?php
if (true) {
$iets = 'blabla';
} else {
$iets = 'bla';
}
?>

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!
Hoi Ozzie,

Ja ook ik heb af en toe eens tijd om weer te reageren -_- (druk druk druk)


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.


Maar ik wil dit soort dingen eruit krijgen, want ik vind het niet mooi. Ik wil voor de consistentie gaan!


Succes!
Thanks Niels :)

Waarom zou je altijd zo veel mogelijk voor optie 1 gaan?

[size=xsmall]Toevoeging op 22/08/2012 21:03:33:[/size]

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
Geen probleem ;-)

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.


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
hehe... daar kan ik je niet echt bij helpen vrees ik :)
rustig aan... en genoeg water drinken ;-)

Reageren