arguments in functie

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Ozzie PHP

Ozzie PHP

29/11/2010 12:16:25
Quote Anchor link
Als een functie een argument nodig heeft dan kan je in het geval van een array aangeven dat het argument een array moet zijn:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
public function foo(array $bar) {

}

Het argument $bar moet nu een array zijn anders krijg je een foutmelding. Kun je echter ook afdwingen dat $bar een getal of een string moet zijn?
 
PHP hulp

PHP hulp

12/01/2025 03:54:38
 
Bas Cost Budde

Bas Cost Budde

29/11/2010 12:49:51
Quote Anchor link
Nee.

Type hinting, zoals deze techniek heet, laat alleen toe dat je objecten of arrays hint. Geen platte datatypes (dat zou ik ook wel leuk vinden ja).

http://php.net/manual/en/language.oop5.typehinting.php
 
Ozzie PHP

Ozzie PHP

29/11/2010 12:59:36
Quote Anchor link
Hmmm, raar eigenlijk :s
Dus je kunt wel een array afdwingen, maar niet een getal of een string... very strange!
 
Kris Peeters

Kris Peeters

29/11/2010 13:20:47
Quote Anchor link
... en uiteraard is er niets dat je tegenhoudt om zelf te controleren op type.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
function foo($bar) {
  if (! is_numeric($bar)) {
    // hier kan je een fout oproepen
  }
  ...
}
 
TJVB tvb

TJVB tvb

29/11/2010 13:24:35
Quote Anchor link
Dat is niet eens heel gek doordat PHP de basis dataypes heel makkelijk transformeert naar een ander datatype. (1 == '1' bijvoorbeeld)
 
Ozzie PHP

Ozzie PHP

29/11/2010 13:31:57
Quote Anchor link
Mja, zelf controleren kan wel, maar zou toch handig zijn als PHP dit voor je doet. Waarom bji een array wel en bij een string niet? Is en blijft vreemd.
 
Bas Cost Budde

Bas Cost Budde

29/11/2010 13:37:28
Quote Anchor link
arrays en objecten krijgen intern een andere aanduiding dan scalar-typen. Een array is overigens niet zo'n stricte constructie als in strengere talen; hash is een betere benaming.

Sja, en 'waarom'... bij de implementatie van type hinting is kennelijk gekozen voor een is_object-achtige test. Typisch zo'n ontwerpkeuzeding. Iemand met meer interne php-kennis mag me verbeteren...
 
Kris Peeters

Kris Peeters

29/11/2010 14:47:17
Quote Anchor link
Ozzie PHP op 29/11/2010 13:31:57:
maar zou toch handig zijn als PHP dit voor je doet.


Goh...

Als je dan die error message krijgt, dan is het nog steeds aan jou (de scripter) om daar iets mee te doen, he.

Ik ga er van uit dat je niet wil dat de gebruiker wordt geconfronteerd met berichten als "Catchable fatal error: Argument 1 passed to foo() must be an array, string given, called in D:\xamp\htdocs...".

Dus, of php nu die fout aanroept of niet, je moet toch ergens controleren of je functie parameters krijgt met de juiste datatypes.

Volgens mij is een is_array() check gemakkelijker dan een catch($e) regelen.
 
Ozzie PHP

Ozzie PHP

29/11/2010 14:51:01
Quote Anchor link
mmja, hangt er vanaf.. als het een interne functie is die geen user input ontvangt maar wel een array verwacht dan mag er van mij best een error optreden als ik een string aanlever in plaats van een array.
 



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.