PHP's __autoload()
(documentation) is pretty interesting to me. Here's how it works:
new Toast_Mitten()
(footnote1)__autoload()
function defined." It runs it.Toast_Mitten
to classes/toast_mitten.php
and told it to require that file. It does.Memory benefit: you only load the classes you need. Terseness benefit: you can stop including so many files everywhere and just include your autoloader.
Things get particularly interesting if
1) Your __autoload()
has an automatic way of determining the file path and name from the class name. For instance, maybe all your classes are in classes/
and Toast_Mitten
will be in classes/toast_mitten.php
. Or maybe you name classes like Animal_Mammal_Weasel
, which will be in classes/animal/mammal/animal_mammal_weasel.php
.
2) You use a factory method to get instances of your class.
$Mitten = Mitten::factory('toast');
The Mitten::factory method can say to itself, "let's see, do I have a subclass called Toast_Mitten()
? If so, I'll return that; if not, I'll just return a generic instance of myself - a standard mitten. Oh, look! __autoload()
tells me there is a special class for toast. OK, here's an instance!"
Therefore, you can start out using a generic mitten throughout your code, and when the day comes that you need special behavior for toast, you just create that class and bam! - your code is using it.
My question is twofold:
1 My apologies to non-native English speakers. This is a small joke. There is no such thing as a "toast mitten," as far as I know. If there were, it would be a mitten for picking up hot toast. Perhaps you have toast mittens in your own country?