2009-09-21 10 views
0

Le code est court, mais complète:Comment faire pour que cet extrait PHP fonctionne sans avertissement?

function process($obj) 
{ 
    if(empty($obj))return 1; 
    return 2; 
} 


echo process($arr['nosuchkey']); 

Comme nous le savons tous, appelant empty($arr['nosuchkey']) ne sera jamais d'émettre des avertissements.

Mais process($arr['nosuchkey']) signale un avis.

Y a-t-il une solution de contournement sans désactiver les avertissements; disons, par la syntaxe?

+0

Qu'est-ce que le msg d'avertissement? – powtac

Répondre

4

Vous pouvez utiliser le error control operator @ mais cela supprimera beaucoup plus que les notifications.

echo @process($arr['nosuchkey']); 

Vous seriez mieux vérifier avant l'appel de fonction:

if (array_key_exists('nosuchkey', $arr)) 
    echo process($arr['nosuchkey']); 

Ou passer la clé séparément

echo process($arr, 'nosuchkey'); 

Assurez-vous que vous connaissez la différence entre empty(), isset() et array_key_exists() - ils attrapent beaucoup de gens.

+1

Vérification avant que la fonction rende la fonction absolument inutile –

+2

Oui, veuillez éviter l'opérateur @. – smack0007

+0

Je suppose que c'est un exemple un peu coupé ... – Greg

2

Essayez celui

function process(&$obj) 

Je ne suis pas sûr si cela fonctionnera

+0

Cela fonctionne. C'est ce que j'étais sur le point d'écrire aussi. – Gumbo

+0

Je me suis souvenu ne pas travailler, mais pas sûr. – omg

0

Peut-être

function process($obj, $index = null) { 
    if(is_array($obj)) 
    { 
     if(!array_key_exists($index, $obj)) 
      return 1; 
     else 
      return 2; 
    } 

    if(empty($obj)) 
     return 1; 

    return 2; 

} 

S'il vous plaît ne cache pas des avertissements avec @ lorsque cela est possible.