Object Oriented coding makes enormous sense when you're looking at a medium sized or larger application - but it's a complete change of thought process for the traditional structured programmer.
We ran an
Object Oriented Programming in PHP course today, and the course concluded with me taking some sample data - web access logs - and starting to specify the classes suited for handling thet data for a variety of reports. Source code is
[here].
You'll see that the example is all in a single file. Yes - it is, but that's just for initial testing; the first program is really no more than a test harness to make sure I have the object descriptions right. Before a program based on these classes went live, the classes would be split out into a separate
required file ... but NOT to three separate files, as would be the case with a Java application.
As we read in records from the log file, we have to interpret them to make up visit objects. The "bull at a gate" approach to that would be to analyse the records in the main code, at least until we knew what type of object we were going to create. However, I have chosen to code a utility (factory) method within the code that will be within the class file - that way, the analysis code will be shareable between many programs, and will be hidden within (encapsulated in) the class structure. It all leads to a very simple main program file:
$rtab = array();
foreach (file("../weekend/ac_20090522") as $lyne) {
if ($obj = addrecord($lyne)) {
$current_ip = $obj->getip();
if (! $rtab[$current_ip]) {
$rtab[$current_ip] = $obj;
} else {
$rtab[$current_ip]->merge($obj);
}
}
}
foreach (array_keys($rtab) as $king) {
$fp = $rtab[$king] -> getfirstpage();
$pc = $rtab[$king] -> gettimes();
$wot = $rtab[$king] -> getwhat();
print ("From $king - $pc pages. Arrived at $fp - $wot<br>");
}
On our Perl course, we have a section labelled
Design MATTERS. How very true - and how very true in PHP as well!
(written 2009-08-27 17:30:35)
Associated topics are indexed under
H306 - PHP - Who is your visitor? [2667] Web page to telephone calls / links using an iPhone - (2010-03-08)
[2343] World Flags in your PHP pages - (2009-08-10)
[2135] What features does this visitors browser support? (PHP) - (2009-04-22)
[1736] Current visitors from around the world - PHP - (2008-08-04)
Q907 - Object Orientation and General technical topics - Object Orientation: Design Techniques [2889] Should Python classes each be in their own file? - (2010-07-27)
[2878] Program for reliability and efficiency - do not duplicate, but rather share and re-use - (2010-07-19)
[2865] Relationships between Java classes - inheritance, packaging and others - (2010-07-10)
[2785] The Light bulb moment when people see how Object Orientation works in real use - (2010-05-28)
[2747] Containment, Associative Objects, Inheritance, packages and modules - (2010-04-30)
[2741] What is a factory? - (2010-04-26)
[2717] The Multiple Inheritance Conundrum, interfaces and mixins - (2010-04-11)
[2523] Plan your application before you start - (2009-12-02)
[2501] Simples - (2009-11-12)
[2327] Planning! - (2009-08-08)
[2170] Designing a heirarcy of classes - getting inheritance right - (2009-05-11)
[2169] When should I use OO techniques? - (2009-05-11)
[1538] Teaching Object Oriented Java with Students and Ice Cream - (2008-02-12)
[1528] Object Oriented Tcl - (2008-02-02)
[1435] Object Oriented Programming in Perl - Course - (2007-11-18)
[1224] Object Relation Mapping (ORM) - (2007-06-09)
[1217] What are factory and singleton classes? - (2007-06-04)
[1047] Maintainable code - some positive advice - (2007-01-21)
[836] Build on what you already have with OO - (2006-08-17)
[831] Comparison of Object Oriented Philosophy - Python, Java, C++, Perl - (2006-08-13)
[747] The Fag Packet Design Methodology - (2006-06-06)
[656] Think about your design even if you don't use full UML - (2006-03-24)
[534] Design - one name, one action - (2005-12-19)
[507] Introduction to Object Oriented Programming - (2005-11-27)
[236] Tapping in on resources - (2005-03-05)
[80] OO - real benefits - (2004-10-09)
H108 - Objects in PHP [2922] Getting the OO design write - with PHP a example - (2010-08-14)
[2921] Does copying a variable duplicate the contents? - (2010-08-14)
[2774] PHP - Object Oriented Design in use - (2010-05-21)
[2680] Static class members in PHP - a documented example - (2010-03-16)
[2641] Object Oriented Programming in PHP - (2010-02-19)
[2632] Shipping a test harness with your class in PHP - (2010-02-12)
[2435] Serialization - storing and reloading objects - (2009-10-04)
[2434] Abstract classes, Interfaces, PHP and Java - (2009-10-03)
[2172] PHP4 v PHP5 - Object Model Difference - (2009-05-11)
[2171] Cleaning up redundant objects - (2009-05-11)
[2160] PHP - getclass v instanceof - (2009-05-07)
[1925] Introduction to Object Oriented Programming - (2008-12-06)
[1820] Sorting objects in PHP - (2008-10-04)
[1819] Calling base class constructors - (2008-10-03)
[1682] Accounts in PHP - an OO demo - (2008-06-19)
[1535] OO PHP demonstration - comparing objects and more - (2008-02-08)
[1153] Object Oriented Model - a summary of changes from PHP4 to PHP5 - (2007-04-18)
[1027] Cue the music, I'm happy. - (2007-01-09)
[720] Planning a hotel refurb - an example of a Gant chart in PHP - (2006-05-14)
[485] North, Norther and Northest - PHP 5 Objects - (2005-11-04)
[421] Don't repeat code - use loops or functions - (2005-08-21)
[343] Should I use structured or object oriented? - (2005-06-10)
[205] PHP5 lets you say no - (2005-02-07)
[124] PHP v Java - (2004-11-20)
[67] Object Oriented Programming in PHP - (2004-09-29)
Some other Articles
Looking ahead to the Autumn season of training and accommodationLua Regular ExpressionsGiving up on user input - keyboard timeout in PerlChecking the database connection manuallyObject Oriented programming - a practical design exampleMaking variables persistant, pretending a database is a variable and other Perl tricksHandling XML in Perl - introduction and early examplesWiltshire / Melksham Weddings - guest accommodationLong job - progress bar techniques (Perl)Designing your data structures for a robust Perl application