exceptions... daar gaan we weer

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: « vorige 1 2 3

Ozzie PHP

Ozzie PHP

11/12/2013 22:57:27
Quote Anchor link
Thanks Wouter :) Gelijk even gebookmarked!

Offtopic:

Wat is dit eigenlijk? Wat doe je hier?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
array_map(function ($i) {
    eval("class {$i}Exception extends Exception { }");
},
explode(' ', 'Foo Bar'));
?>

 
PHP hulp

PHP hulp

18/04/2024 12:59:18
 
Wouter J

Wouter J

11/12/2013 23:02:31
Quote Anchor link
>> Wat is dit eigenlijk? Wat doe je hier?

Snelle en hele lelijke methode om de 2 exception klassen aan te maken:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php
explode(' ', 'Foo Bar'); // is eigenlijk gewoon array('Foo', 'Bar');

array_map(function ($i) { ... }, $array); // is eigenlijk gewoon foreach ($array as $i) { ... }

eval("class {$i}Exception extends Exception {}");
// eval voert de string als PHP uit (hartstikke gevaarlijk)
// en $i is Foo en Bar, om zo FooException en BarException te maken die \Exception extenden

?>
 
Ozzie PHP

Ozzie PHP

11/12/2013 23:05:39
Quote Anchor link
Wow :)

Is dat niet lastig om zo even uit je mouw te schudden? :-s
 
Wouter J

Wouter J

11/12/2013 23:08:22
Quote Anchor link
Nee, anders had ik die code zelf wel 2 keer opgeschreven. :p (was ik waarschijnlijk qua typewerk sneller klaar geweest)

En eigenlijk denk ik, nu ik er wat langer over nadenk, dat dit zelfs mooier en sneller was geweest:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
spl_autoload_register(function ($c) {
    eval("class {$c} extends Exception { }");
});

?>
 
Ozzie PHP

Ozzie PHP

11/12/2013 23:29:26
Quote Anchor link
Hehe... grappig :) Je blijft me verbazen, hahaha...
 
Chris -

Chris -

12/12/2013 09:24:54
Quote Anchor link
Houd er overigens rekening mee dat eval vaak wordt uitgeschakeld in de PHP.ini omdat het wordt beschouwd als een onveilige functie.

Buiten dat, waarom een spl_autoload_register die een Exception extend en niet eerst zoeken of de class in een ander bestand staat? Lijkt mij dat dáár de autoload juist voor is toch?
 
Dos Moonen

Dos Moonen

12/12/2013 10:31:59
Quote Anchor link
Chris - op 12/12/2013 09:24:54:
Houd er overigens rekening mee dat eval vaak wordt uitgeschakeld in de PHP.ini omdat het wordt beschouwd als een onveilige functie.

Buiten dat, waarom een spl_autoload_register die een Exception extend en niet eerst zoeken of de class in een ander bestand staat? Lijkt mij dat dáár de autoload juist voor is toch?

Het is puur opzichzelf staand voorbeeld code om een punt te maken. Het is een truckje dat je eigenlijk alleen tijdens testen of voorbeeldjes wilt gebruiken.
 
Chris -

Chris -

12/12/2013 11:14:33
Quote Anchor link
Is alleen niet direct duidelijk voor beginners, vandaar mijn note :)
 
Ward van der Put
Moderator

Ward van der Put

12/12/2013 11:33:22
Quote Anchor link
Chris - op 12/12/2013 09:24:54:
Buiten dat, waarom een spl_autoload_register die een Exception extend en niet eerst zoeken of de class in een ander bestand staat? Lijkt mij dat dáár de autoload juist voor is toch?

En daarbij: als je toch via spl_autoload_register() aan de slag gaat met SPL, waarom dan niet ook de SPL exceptions gebruiken?
Gewijzigd op 12/12/2013 11:33:40 door Ward van der Put
 
Ozzie PHP

Ozzie PHP

12/12/2013 13:48:10
Quote Anchor link
Euh guys, het was gewoon een code-trucje van Wouter gebaseerd op het voorbeeldje dat ik eerder had gegeven. Niks aan de hand dus.
 
Ward van der Put
Moderator

Ward van der Put

12/12/2013 13:53:56
Quote Anchor link
Ja, dat wisten we al, "eval is evil", alleen vroeg ik me af: wáárom zou je \Exception extenden als dat al is gedaan in de SPL Exceptions?
 
Ozzie PHP

Ozzie PHP

12/12/2013 13:55:57
Quote Anchor link
Zoals ik zei... Wouters voorbeeld was een afgeleide van mijn voorbeeld waarbij ik een FooException en een BarException had gebruikt.
 
Dos Moonen

Dos Moonen

12/12/2013 14:35:24
Quote Anchor link
Wouter wilde de output tonen door een link te geven naar een werkend op 3v4l.org

De code die Ozzie had gegeven is dit:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
<?php

try {
  throw new FooException('foo');
}
catch (FooException $e) {
  throw new BarException('bar');
}
catch (BarException $e) {
  echo 'hallo!';
}

?>


Als je dat draait bestaan er 2 classes niet en krijg je een error. Dat wilde wouter niet. Dus maakte hij (op een minder saaie manier) de classes aan. Hij wilde het werkend krijgen, dus Exception extenden is het makkelijkst. Het is ook nog eens pseudo code, dus waarom zou je SPL Exceptions er bij gaan betrekken?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php

// begin code die nodig is om het voorbeeld te laten werken en er voor de rest totaal niet toe doet

class FooException extends Exception {}
class BarException extends Exception {}

// eind code die nodig is om het voorbeeld te laten werken en er voor de rest totaal niet toe doet

// begin code waar het om ging


try {
  throw new FooException('foo');
}
catch (FooException $e) {
  throw new BarException('bar');
}
catch (BarException $e) {
  echo 'hallo!';
}


// eind code waar het om ging

?>


Vind je het nu nog nodig om SPL Exceptions te gebruiken bij een boorbeeld? Zolang jij niet aangeeft in welke context je de vraag stelt neem ik aan dan het in de huidige context gevraagt wordt: een voorbeeld dat de een klein geïsoleerd gedrag duidelijk maakt. Niet een voorbeeld dat best practices demonstreert wat beginners zouden moeten volgen.

Is dat een goede reden waarom \Exception extenden in die context net zo goed is als SPL Exceptions classes extenden?
 
Wouter J

Wouter J

12/12/2013 16:13:59
Quote Anchor link
Pfff... wat een ophef :)

Ik zal voortaan wel weer gewoon basic PHP gaan gebruiken :P
 
Ozzie PHP

Ozzie PHP

12/12/2013 18:13:18
Quote Anchor link
>> Ik zal voortaan wel weer gewoon basic PHP gaan gebruiken :P

Hehe, lol :)
 

Pagina: « vorige 1 2 3



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.