Czasem lubię się pastwić nad ludźmi, czasem nad kodem. Nad ludźmi bywa kiepsko, bo może to być nielegalne. Nad kodem lepsiej, bo może to stanowić niezłe ćwiczenie. Ostatnio mnie trafiło, jak zobaczyłem commenta o wdzięcznym brzmieniu:
Eddy Vlad
24-Nov-2009 04:59
The shortest recursive delete possible.
/**
* Delete a file or recursively delete a directory *
* @param string $str Path to file or directory
*/
function recursiveDelete($str)
{
if(is_file($str))
{
return @unlink($str);
}
elseif(is_dir($str))
{
$scan = glob(rtrim($str,'/').'/*');
foreach($scan as $index=>$path)
{
recursiveDelete($path);
}
return @rmdir($str);
}
}
Kilka minut zabawy i wymodziłem coś takiego:
function rrmdir($path)
{
return is_file($path)?
@unlink($path):
array_map('rrmdir',glob($path.'/*'))==@rmdir($path)
;
}
Wspomoże ktoś czymś jeszcze krótszym?
rm – rf *
Można by tak. Bez żadnych warunków :P
function rrmdir($path)
{
@array_map(‚rrmdir’,@glob($path.’/*’));
@unlink($path);
@rmdir($path);
}
najkrótszy możliwy. Kiedyś było to „o najkrótszym możliwym czasie wykonania”. wtedy zamiast od
<?Php
zaczelibysmy od
mov edx,mem(tu wpisz cos jakies adresowanie, najlepiej wskznik do tego katalogu)
….
czas leciał. Z czasem optymalizator -O2 -f-unroll-loops i inne takei tam na tyle rozleniwiał, że historia zaczynałaby sie od
int recursivedelete(filepointer *to_be_deleted)
{
…
}
Z czasem Kerighan i Ritchie dostali zastapieni przez ANSI oraz jakiegos norwega czy fina od dwóch plusów i stalismy sie obiektowi mimo woli
a dalej to już prosta scieżka do biometrics->voice)
/* secret part, do not release to public */
call recursive_delete(directory) ; /*we actually concentrated more on computer case design, who cares about advanced functions anyway */
/*end of secret part */
call i_notify_user_of_success()
}
;)
@grzana – i to klasyczny przykład, że duch w narodzie nie ginie ;P Nie pomyślałem o takim nadużyciu ;P Ekstra ;D