Page 1 of 1

PHP Function / Class

Posted: Sat Mar 15, 2014 9:25 am
by Revolution
Question:

Should PHP Functions / Classes be used to create html script or
should it primarily be used to generate and manipulate data via php and or a database.

Generally, I create functions and classes for commonly utilized code... but not single use code.

For example: generating a list of States... could be used in different parts of an applications.

But - displaying a list of States would might only be used in 1 part of an application.

With other languages... I would create an object to retrieve the associated data and let a non-function / class display the data.

To use a CSS equivelent... CSS allows you to remove the design layer from the presentation layer.

I hope I made this question understandable.

Re: PHP Function / Class

Posted: Sat Mar 15, 2014 9:45 am
by Celauran
Using your states example, I'd have a class method fetch the list from the DB (though I suppose a hardcoded array in a helper class would suffice since the values aren't likely to change), pass the list to a view, and display it using simple flow control. I can't come up with a use case where a function should be outputting HTML.

Re: PHP Function / Class

Posted: Sat Mar 15, 2014 10:16 am
by Revolution
Thanks for responding. I think I understand what you are saying.

Please bear in mind.. I an C# developer - and a Cold Fusion developer
transitioning into PHP OO. I know PHP non-OO fairly well

- but PHP OO is still NEW to me. And I'm having some difficulties understand how PHP does OO.

I have an object: oState.
with 4 methods:
getStates, getCities, displayStates, displayCities

getStates - queries MySql to retrieve a list of States
getCities - queries MySql to retrieve a list of Cities associated to the specific State.

displayStates - simply loops through the query using php, and creates html code to display the resulting data into an html select.
--- the select uses JS to hide / show specific DIVs as generated from displayCities (below).

displayCities - simply loops through the query using php, and creates html code to display the resulting data... for the requested the State
--- cities are displayed in DIVs.. and hidden or shown via an html select using JS (above)

The problem I have is this... the methods displayStates and displayCities... really only creates html output.

In other languages - I've always placed this "this type of code" in a parent script ie: index.php... instead of inside a class.

A friend of mine... says (with PHP OO... because displayStates and displayCities "are associated" with my "general concept" I have called "Locations"...
all code related to "States" and "Cities" should be "grouped into a Location Object".

The problem I have with this is... I've always used objects to retrieve and manipulate data - not to display / generate html code.

The parent script would display / generate html code by cycling / looping through the resulting data / query.

I'm trying to understand - which is "better or more proper" way of using PHP OO ?

Should all or most code "related to a class" to be placed in 1 object file... even if it's related to design /data and presentation

or like CSS... should there be a separation of design and presentation.

With CSS - design is the css script - presentation would be html or php.

With PHP OO... data or value sets / puts would be class... and presentation would be php.

Thanks again. I do hope I made this understandable and didn't ramble.

Re: PHP Function / Class

Posted: Sat Mar 15, 2014 12:06 pm
by Celauran
Sounds to me like you have the right idea. Keep your accessors and mutators in the model, keep presentation logic in your views. There's no need for a displayStates class.

Code: Select all

<?php

$st = new State();
$state_list = $st->getStates();

?>


<div>
	etc
	...
	<select name="state">
		<?php foreach ($state_list as $state): ?>
		<option value="<?= $state['abbr']; ?>"><?= $state['name']; ?></option>
		<?php endforeach; ?>
	</select>
	...
	etc

Re: PHP Function / Class

Posted: Wed Mar 26, 2014 11:49 am
by Revolution
thanks... this was what I thought.