2010-02-15 3 views

Répondre

3

Vous pouvez utiliser vide pour vérifier si la valeur a une valeur qui pourrait être inutile. Si votre SignupCode ne sera jamais une chaîne vide (""), 0 ou another empty value, essayez ceci:

if(empty($this->objCodes[0]->SignupCode)) 
{ 
    $this->objCodex[0] = null; 
} 

La raison pour laquelle je l'habitude d'utiliser empty() est parce que si je suis importation à partir d'une base de données, les données que je cherche retournera toujours true à isset() car il a été défini par la base de données. Je suis plus intéressé si c'est null ou une chaîne vide, car cela signifie qu'il n'y a vraiment rien de valeur dans la variable.

Si vous chargez des valeurs dans votre objet comme celui-ci:

Vous aurez toujours recevoir un true à la fonction isset() lors du test comme celui-ci:

if(isset($myObjs[0]->SignupCode)) 

Parce que la valeur est techniquement toujours va être 'set'

Si vous essayez de voir si elle n'est pas définie, essayez ceci:

if(!isset($this->objCodes[0]->SignupCode)) 
{ 
    $this->objCodex[0] = null; 
} 
+1

L'utilisation de empty() empêcherait les valeurs 0 ou" 0 "d'être correctes. – aefxx

+0

Relisez ma réponse s'il vous plaît ... –

+1

Je l'ai fait et la façon dont j'interprète la question de l'OP, il/elle veut tester avec isset car c'est soit un objet qui a un membre de l'ensemble nommé SignupCode ou non. – aefxx

0

Le puits est-il défini $this->objCodes? Si oui, est-ce un tableau? Cela fonctionnerait aussi comme une chaîne puisque vous pouvez traiter un sring et un tableau de caractères uniques. Aussi avec votre déclaration, vous êtes en train de vérifier si SignupCode est sur un objet ... pas si $this->objCodes[0] est activé.

1

Je crois que l'erreur que vous recevez provient de l'accesseur de propriété non valide ->"NULL".

La fonction isset doit être utilisé pour vérifier si un index de tableau existe, comme le [0] Index vous vérifiez objCodes:

if(isset($this->objCodes[0])) { 

Sans connaître le type d'objet que vous avez actuellement dans le tableau objCodes qui a la propriété de SignupCode Je ne peux pas être précis dans une réponse à la mise en valeur par défaut, mais si j'utilise la classe ObjectCode comme un exemple, vous pouvez définir une valeur par défaut sur votre élément de tableau comme celui-ci:

if(!isset($this->objCodes[0])) { 
    $this->objCodes[0] = new ObjectCode(); 
} 

Si Je savais plus sur ce que y J'essaie de réaliser avec ce bloc de code que je pourrais être plus descriptif.

MISE À JOUR: Si vous voulez vraiment vous assurer que votre collection a toujours en arrière une valeur que vous pouvez créer un conteneur qui a mis en œuvre la ArrayAccess interface puis mettre en œuvre le offsetGet method pour renvoyer un défaut lorsque l'index demandée est introuvable:

public class ObjectCodeContainer implements ArrayAccess { 
    private $collection; 

    public function __construct() { 
    $this->collection = array(); 
    } 

    public function offsetGet($offset) { 
    if(!isset($this->collection[$offset])) { 
     $this->collection[$offset] = new ObjectCode(); 
    } 

    return $this->collection[$offset]; 
    } 

    // implement the other abstract methods 
} 
0
$default = array('color' => 'blue', 'model' => 'Verizon', 'sex' => 'Female'); 

$new = array('color' => 'red', 'sex' => 'Male'); 

$array = array_merge($default, $new); 

var_dump($array); 
// array('color' => 'red', 'model' => 'Verizon', 'sex' => 'Male') 
+1

WTF? .................. –

+0

@ Chacha102 - 'Comment définir une valeur par défaut pour un tableau en php afin d'éviter un décalage indéfini?' –

+0

Bien, mais seulement fonctionne si vous voulez des valeurs par défaut pour des clés connues spécifiques. –

Questions connexes