I’ve got a class I wrote to work with the front end (web browser side) of a shopping cart.
It’s fairly simple in that I send the class a product ID that I bury in the URL and then query a database populating the classes variables for use in retrieving the data through some public methods.
To interface with my actual physical web page I have a file I call viewFunctions.php. Wherein I instantiate my class called ItemViewPackage():
<?php
require_once(dirname(__FILE__) . '/ItemViewPackage.php');
$viewObject = new ItemViewPackage($_GET['page']);
So, I have shoppingcartpage.php (the physical url) that requires the file viewFunctions.php that loads my class ItemViewPackage().
The output page shoppingcartpage.php calls functions like get_item_info(‘title’) or get_item_info(‘price’) which in the viewFunctions.php file is made like so:
function get_info($type){
echo $viewObject->get_info($type);
}
Now, right off the bat, this isn’t working because, I assume, $viewObject is not global. So I make $viewObject global like so:
function get_info($type){
global $viewObject;
echo $viewObject->get_info($type);
}
But, this doesn’t work either, I still get an error for “Call to a member function get_info() on a non-object“
Now, the only thing that works is:
function get_info($type){
$viewObject = new ItemViewPackage($_GET['page']);
echo $viewObject->get_info($type);
}
But, I don’t want to re-instantiate my object every time I make a call to this function (which is several times for several bits of information). I’d rather instantiate once at the top of my viewFunctions.php doc and use that object every time I call this function.
Am I going about this completely wrong?
Thanks in advance.
DIAGRAM (hopefully it helps visualize)


What for do you need
viewFunctions.phpanyway? It’s only wrapping theItemViewPackage. Remove that and use theItemViewPackagedirectly, e.g.Then you dont have to bother with globals or Singletons. If you dont want a second instance, dont instantiate a second one. It’s simple as that in PHP. If there is anything in
viewFunctions.phpthat modifies the output of the$viewObjectinstance, consider making that into a class and have it aggregate the$viewObjectinto a property, e.g.then you can access the
$viewObjectfrom within the Helper object with$this->propertyName.As for reducing load to the database: this is a solved problem. Consider using a cache.