En omdat ik die vaak aanroep stop ik die het liefst in een function.
Maar BINNEN die function is er een subfunctie die meermaals BINNEN die functie wordt gebruikt.
(of zoals in het voorbeeld gewoon voor de leut)
Nu kan ik me niet meer herinneren of ik ooit een hogere programmeertaal ben tegengekomen die niet met locale functies overweg kon. Dus functies gedeclareerd binnen een functie die daarbuiten niet zichtbaar zijn.
Maar in PHP ben ik dat nog nergens in het gebruik, de leerboeken, de voorbeelden, de documentatie tegengekomen. Toch werkt het. Zelfs soepel, ik bedoel, zelfs gedeclareerd ná code.
HERSTEL DE BEWERING!
Bij hernieuwde aanroep faalt de code.
PHP 'onthoudt' de locale functie en stopt met een 'previous declared' foutmelding.
PHP kan niet overweg met locale functies.
(Weer wat geleerd)
De vraag: Wordt dat door julie professionals gebruikt? Of is dat (en waarom dan) onbehoorlijk PHP?
Voorbeeld van een locale functie:
// unix timestamp van nl-mysql-vs-datum OF nl-tijd
function timeStamp($dt = null) {
if ($dt == null) {
$dt = time();
return $dt;
}
function eeuwJaar($j) {
if (strlen($j) == 2) {
if ($j > 40)
$j = 1900 + $j;
else
$j = 2000 + $j;
}
return $j;
}
// tijd
if (strpos($dt, ':') > 0) {
$a = explode(':', $dt);
$H = $a[0];
$i = $a[1];
$s = 0;
return mktime($H, $i, $s, date('m'), date('d'), date('Y'));
}
// nl of mysql datum
if (strpos($dt, '-') > 0) {
$a = explode('-', $dt);
if (strlen($a[0]) == 4) {
$j = $a[0];
$m = $a[1];
$d = $a[2];
} else {
$d = $a[0];
$m = $a[1];
$j = $a[2];
}
}
// vs datum
if (strpos($dt, '/') > 0) {
$a = explode('/', $dt);
$d = $a[1];
$m = $a[0];
$j = $a[2];
}
// jaartal correctie
$j = eeuwJaar($j);
return mktime(date('H'), date('i'), date('s'), $m, $d, $j);
}
$invoer = '8/9/78';
print date('d-m-Y', timeStamp($invoer));
print '<br/>';
print date('Y-m-d', timeStamp());
/*
09-08-1978
2017-06-22
*/