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.
PHP Function / Class
Moderator: General Moderators
Re: PHP Function / Class
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.
-
Revolution
- Forum Newbie
- Posts: 8
- Joined: Sat Mar 15, 2014 9:09 am
Re: PHP Function / Class
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.
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
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-
Revolution
- Forum Newbie
- Posts: 8
- Joined: Sat Mar 15, 2014 9:09 am
Re: PHP Function / Class
thanks... this was what I thought.