dirname(__FILE__) and __DIR__ give exactly the same result in PHP, although one (__DIR__) is evaluated at compile-time, while the other (dirname(__FILE__)) has at least part of it (the function) evaluated at execution time.
Ever wondered what the difference is, in terms of efficiency, between the two? I've written a *very* simple script to try it out:
<?php $loops = 100000000; echo 'Testing dirname(__FILE__)' . PHP_EOL; $start = time(); $dir = ''; for ($i = 0; $i < $loops; $i++) { $dir = dirname(__FILE__); } echo 'dirname(__FILE__) took ' . (time()-$start) . 's' . PHP_EOL; $start = time(); $dir = ''; for ($i = 0; $i < $loops; $i++) { $dir = __DIR__; } echo '__DIR__ took ' . (time()-$start) . 's' . PHP_EOL;So what it does is it executes both statements 100,000,000 times on my laptop, without any PHP caching enabled. The results?
Testing dirname(__FILE__) dirname(__FILE__) took 17s __DIR__ took 4sSo __DIR__ is about 4 times faster, albeit only when you consider 100,000,000 executions (which is unlikely in most configurations). However, it is common for a complex PHP application to require about 10,000 executions of functions to render one single page, so if you have about 1000 users, you'll start saving a relevant amount of processing time.
Comments
[…] dirname(__FILE__) vs __DIR__ in PHP […]