The n-tier descriptions can get fuzzy, though. To add to what Andy said, I
have found a good explanation to be that most applications, web or
otherwise, have 3 basic logic types:
1. Content logic - the information you give to the user
2. Presentation logic - the way you display the information
3. Application logic - the way you determine both of the above,
and the functionality the presentation represents
In a typical PHP configuration, either all three are mixed within the
document, or elements of the content are put in a database.
<?php
print "<table>\n"; // display logic
while($line = mysql_fetch_array($result)){ // app logic
print "\t<tr>\n"; // display logic
while(list($col_name, $col_value) = each($line)){ // content logic
print "\t\t<td>$col_value</td>\n"; // display & content
} // app logic
print "\t</tr>\n"; // display logic
} // app logic
print "</table>\n"; // display logic
?>
Granted that Mason and HTML templates encourage a similar markup, there
are other ways to do it in Perl. Part of what makes XSLT and
AxKit solutions attractive to at least a segment of our population (of
which I count myself part of) is the ability to completely separate all
three of the stated logic types. When you have content XML, display
XSLT/XHTML, and separate app logic that generates the content, you have
total separation of that logic.
One reason I think that "lack of n-tier" may not be the best description
of PHP's downfall is because you *can* do n-tier in PHP. Add a query to
the above which will get the display elements from a database, too. Kinda
defeats the purpose of PHP in my mind, but PHP now does XSLT (?) and GTK
(??), so what do I know.
Dan