[OOP] Arrays declareren in klassen
Niet in een catch statement, maar in je error handler. Een interessante hack:
Wat is dit voor vreemde if-constructie met meerdere returns. Hoe werkt zoiets?
Die constructie die je ziet is ietsjes effecienter met geheugen omdat je geen variabele aanmaakt. Er is maar een return.
return ($a OR $b OR $c OR $d OR $e);
Wat wil dat zeggen... hoe weet je nu wat er wordt gereturned? Misschien stel ik de vraag een beetje onduidelijk, maar ik zie dus een return met daarin meerdere waardes die kunnen worden gereturned. Wanneer wordt wat gereturned? Dat is eigenlijk mijn vraag... ik kan me niet herinneren dat ik ooit een return heb gezien waarin meerdere opties staan. Dos, ik snap het nog steeds niet... sorry... :-/
Ik begrijp zelf het hele nut ook niet van die functie trouwens... Ozzie, wanneer er iets true-ish (getallen behalve 0, strings behalve lege string, true, etc.) uit komt. strpos returned false wanneer de string niet is gevonden en de positie wanneer die wel is gevonden. Dat wordt dan dus gereturned.
Dos Moonen op 19/01/2014 11:45:05:
Niet in een catch statement, maar in je error handler. Een interessante hack: http://www.php.net/manual/en/language.oop5.typehinting.php#111411
Wat is dit voor vreemde if-constructie met meerdere returns. Hoe werkt zoiets?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
<?php
function optimized_strpos($ErrLevel, $ErrMessage) {
if ($ErrLevel == E_RECOVERABLE_ERROR
// order this according to what your app uses most
return strpos($ErrMessage, 'must be an instance of string, string')
|| strpos($ErrMessage, 'must be an instance of integer, integer')
|| strpos($ErrMessage, 'must be an instance of float, double')
|| strpos($ErrMessage, 'must be an instance of boolean, boolean')
|| strpos($ErrMessage, 'must be an instance of resource, resource');
}
?>
function optimized_strpos($ErrLevel, $ErrMessage) {
if ($ErrLevel == E_RECOVERABLE_ERROR
// order this according to what your app uses most
return strpos($ErrMessage, 'must be an instance of string, string')
|| strpos($ErrMessage, 'must be an instance of integer, integer')
|| strpos($ErrMessage, 'must be an instance of float, double')
|| strpos($ErrMessage, 'must be an instance of boolean, boolean')
|| strpos($ErrMessage, 'must be an instance of resource, resource');
}
?>
return (false || false || true || false || false); maar dan met functies inplaats van hard coded booleans.
Ik snap eigenlijk de constructie niet... hoe kun je op basis van 1 if meerdere returns krijgen?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
return (true || false);
// is het zelfde alse
return true || false;
// je zou het ook kunnen schrijven als
$a = strpos($ErrMessage, 'must be an instance of string, string');
$b = strpos($ErrMessage, 'must be an instance of integer, integer');
$c = strpos($ErrMessage, 'must be an instance of float, double');
$d = strpos($ErrMessage, 'must be an instance of boolean, boolean');
$e = strpos($ErrMessage, 'must be an instance of resource, resource');
return ($a !== FALSE OR $b !== FALSE OR $c !== FALSE OR $d !== FALSE OR $e !== FALSE OR);
// Mocht strpos ooit 0 returnen dan is het dus duidelijk niet de melding "Argument _nummer_ passed to _functie_ blabla". Dus 0 en FALSE zijn beiden niet wat je wilt, waardoor je het simpeler kan schrijven als
return ($a OR $b OR $c OR $d OR $e);
?>
return (true || false);
// is het zelfde alse
return true || false;
// je zou het ook kunnen schrijven als
$a = strpos($ErrMessage, 'must be an instance of string, string');
$b = strpos($ErrMessage, 'must be an instance of integer, integer');
$c = strpos($ErrMessage, 'must be an instance of float, double');
$d = strpos($ErrMessage, 'must be an instance of boolean, boolean');
$e = strpos($ErrMessage, 'must be an instance of resource, resource');
return ($a !== FALSE OR $b !== FALSE OR $c !== FALSE OR $d !== FALSE OR $e !== FALSE OR);
// Mocht strpos ooit 0 returnen dan is het dus duidelijk niet de melding "Argument _nummer_ passed to _functie_ blabla". Dus 0 en FALSE zijn beiden niet wat je wilt, waardoor je het simpeler kan schrijven als
return ($a OR $b OR $c OR $d OR $e);
?>
Die constructie die je ziet is ietsjes effecienter met geheugen omdat je geen variabele aanmaakt.
Gewijzigd op 19/01/2014 12:19:26 door Dos Moonen
return ($a OR $b OR $c OR $d OR $e);
Wat wil dat zeggen... hoe weet je nu wat er wordt gereturned? Misschien stel ik de vraag een beetje onduidelijk, maar ik zie dus een return met daarin meerdere waardes die kunnen worden gereturned. Wanneer wordt wat gereturned? Dat is eigenlijk mijn vraag... ik kan me niet herinneren dat ik ooit een return heb gezien waarin meerdere opties staan.
Waar ging dit topic ook alweer over?
Ik begrijp zelf het hele nut ook niet van die functie trouwens...
http://3v4l.org/Tl9VT
De reden dat ik het op bracht is omdat het een voorbeeld is dat bewijst dat catchable error niet via een catch block, maar alleen via de geregistreerde error handler op te vangen zijn.
Ik raad niet aan dit te gebruiken, maar het is wel leuk om te weten dat het kan.
PS. wat wel kan is in de error handler de error omzetten in een exception en daarna de exception te catchen. Maar je hebt dus nog steeds een error handler nodig.
Zoals ik al zei is het een hack: De reden dat ik het op bracht is omdat het een voorbeeld is dat bewijst dat catchable error niet via een catch block, maar alleen via de geregistreerde error handler op te vangen zijn.
Ik raad niet aan dit te gebruiken, maar het is wel leuk om te weten dat het kan.
PS. wat wel kan is in de error handler de error omzetten in een exception en daarna de exception te catchen. Maar je hebt dus nog steeds een error handler nodig.
Gewijzigd op 19/01/2014 16:48:33 door Dos Moonen
Thanks heren, duidelijk!