[wp-hackers] Clarification of wp-includes/class folder
Jacob Santos
dragonwing at dragonu.net
Sat Sep 8 22:34:56 GMT 2007
The last time I bought this up, it was well received, or so I thought.
However, the bug and patches on Trac were not.
<http://trac.wordpress.org/ticket/4899>.
It is against my religion to willfully add a closing PHP tag to a class
file. I'm a firm believer of this religion. Since it is a coding
standard, I will add them. However this ticket should be looked at.
<http://trac.wordpress.org/attachment/ticket/4901/cleantrailingspaces.diff>
for a list of potential files which may give problems in some edge
cases. The main area of concern is wp-includes/*.php.
A few points bought up in the ticket:
1. Class Folder name
2. Small amount of classes
Rest of the discussion was on the lack of closing PHP tag.
I however gave four justification points. Not to say that at least a few
of them can easily be crushed with a good argument, but it would at
least allow me to better explain my thoughts.
1. Allows for Classes to be Unit Tested easily. Some classes are
within files that contain presentation, which doesn't easily allow
for unit testing the class.
2. Single location to find classes, moves classes that are within
other files into a location where developers and plug in authors
can find them. Intuitive locations.
3. Submitting Patches for classes should allow for better versioning.
4. Possible optimization by only including the classes that are
needed. (Think Administration or installer)
The main justification is that moving forward, PHP 4 will be left
behind, eventually at some point and __autoload will be of some use.
Whether or not it is a dirty hack is irrelevant. Providing for this and
following the PEAR class folder scheme, I've found is a lot easier to
find classes, since the folder scheme is directly related to the class
name. In wp-classes.php, you should expect to find all WordPress
classes, but not so. WP_Rewrite is in rewrite.php. If you are lucky,
you'll only have to look once, if you are unlikely you would have to
look at two places. However, without looking at the codex, where would
you expect to find WP_Ajax_Response? wp-classes.php perhaps? I've found
it once, and even now I have no idea. *I should know where to look the
first time, than constantly searching.*
On the name of the folder, wp-includes/class is just my preference for
the patches. It can be whatever. I will however debate my reasoning for
using that folder name.
1. wp-includes/classes/WP/Cache.php
2. wp-includes/class/WP/Cache.php
Looking at it, it seemed intuitive, since I'll want to be including a
single class, named WP_Cache. However, thinking as the folder is holding
many classes, wp-includes/classes/ would make more sense. Whatever. I'll
just be happy with having a folder for classes.
For the second point against this setup, what happens at which point
when WordPress does get even more classes and the discussion comes up
again? "We shouldn't do that since we have too many classes and it would
be too much work to move the classes." Now is the best time, as it
allows for the most forward outlook and minimal work.
I'm sure that once this is set in place that many people would be on
board, since its advantages have to be seen for themselves. However,
seeing classes in many different places is madness. Why wp-includes
exists and yet there are functions and classes in other base files and
in the wp-admin is beyond me. It is a disadvantage and causes more
headaches to developers looking to extend WordPress and in some classes
causes extra work since the functions would have to be rewritten since
the file its in has output that would need to be captured.
I would recommend that all functions and classes be, at the very least
and if we can agree on anything, in wp-includes.
Jacob Santos
More information about the wp-hackers
mailing list