2010-02-16 8 views
0

Hey tout ... Quand je cours le code ci-dessous, le si (property_exists (get_class ($ puzzleCharacters_encrypted), $ solutionCharacter) continue d'évaluer à faux, mais les déclarations d'écho qui précèdent sont montrant les informations correctes, donc les propriétés sont bel et bien là. Tout ce que je pourrais être absent? (PHP version 5.2.11)Avoir un problème avec PHP property_exists()

$puzzle_solution = $currentPuzzleData->getVal("text"); 
$puzzle_encryption = ""; 
for ($i = 0; $i < strlen($puzzle_solution); $i++) 
{ 
    $solutionCharacter = substr($puzzle_solution, $i, 1); 
    echo ("\$solutionCharacter = " . $solutionCharacter . "<br />\n"); 
    echo ("\$puzzleCharacters_encrypted->getVal(" . $solutionCharacter . ") = " . $puzzleCharacters_encrypted->getVal($solutionCharacter) . "<br />\n"); 
    if (property_exists(get_class($puzzleCharacters_encrypted), $solutionCharacter)) 
    { 
     $encryptionCharacter = $puzzleCharacters_encrypted->getVal($solutionCharacter); 
     $puzzle_encryption .= $encryptionCharacter; 
    } 
    else 
    { 
     $puzzle_encryption .= $solutionCharacter; 
    } 
} 
echo ("<br />\n" . $puzzle_solution); 
echo ("<br />\n" . $puzzle_encryption); 

Merci!

+0

Peut-être que je manque quelque chose ici, mais quelle est la relation entre 'property_exists (..., $ solutionCharacter)' et '$ obj-> getVal ($ solutionCharacter)'? – VolkerK

Répondre

0

ce détachement comme une réponse à cause du code ...

class puzzleCharacters 
{ 
    public $char_a; 
    public $char_b; 
    public $char_c; 
    public $char_d; 
    public $char_e; 
    public $char_f; 
    public $char_g; 
    public $char_h; 
    public $char_i; 
    public $char_j; 
    public $char_k; 
    public $char_l; 
    public $char_m; 
    public $char_n; 
    public $char_o; 
    public $char_p; 
    public $char_q; 
    public $char_r; 
    public $char_s; 
    public $char_t; 
    public $char_u; 
    public $char_v; 
    public $char_w; 
    public $char_x; 
    public $char_y; 
    public $char_z; 
    public $char_A; 
    public $char_B; 
    public $char_C; 
    public $char_D; 
    public $char_E; 
    public $char_F; 
    public $char_G; 
    public $char_H; 
    public $char_I; 
    public $char_J; 
    public $char_K; 
    public $char_L; 
    public $char_M; 
    public $char_N; 
    public $char_O; 
    public $char_P; 
    public $char_Q; 
    public $char_R; 
    public $char_S; 
    public $char_T; 
    public $char_U; 
    public $char_V; 
    public $char_W; 
    public $char_X; 
    public $char_Y; 
    public $char_Z; 
    public $char_0; 
    public $char_1; 
    public $char_2; 
    public $char_3; 
    public $char_4; 
    public $char_5; 
    public $char_6; 
    public $char_7; 
    public $char_8; 
    public $char_9; 

    public function setVal($prop, $val) 
    { 
     $this->{"char_" . $prop} = $val; 
     //echo ("setting \$this->\$char_" . $prop . " as " . $val . "<br />\n"); 
    } 

    public function getVal($prop) 
    { 
     //echo ("getting \$" . $prop . " as " . $this->{"char_" . $prop} . "<br />\n"); 
     return ($this->{"char_" . $prop}); 
    } 
} 

La sortie de printr ($ puzzleCharacters_encrypted):

.puzzleCharacters Object ([char_a] => x [char_b] => i [char_c] => y [char_d] => j [char_e] => o [char_f] => m [char_g] => p [char_h] => n [char_i] => v [char_j] => l [char_k] => w [char_l] => s [char_m] => u [char_n] => e [char_o] => f [char_p] => h [char_q] => q [char_r] => b [char_s] => k [char_t] => z [char_u] => a [char_v] => r [char_w] => t [char_x] => c [char_y] => d [char_z] => g [char_A] => X [char_B] => I [char_C] => Y [char_D] => J [char_E] => O [char_F] => M [char_G] => P [char_H] => N [char_I] => V [char_J] => L [char_K] => W [char_L] => S [char_M] => U [char_N] => E [char_O] => F [char_P] => H [char_Q] => Q [char_R] => B [char_S] => K [char_T] => Z [char_U] => A [char_V] => R [char_W] => T [char_X] => C [char_Y] => D [char_Z] => G [char_0] => 7 [char_1] => 5 [char_2] => 8 [char_3] => 0 [char_4] => 4 [char_5] => 6 [char_6] => 2 [char_7] => 3 [char_8] => 1 [char_9] => 9) 
+0

@Eric alors il est évident que propertyExists() doit échouer, parce que vous travaillez avec 'char_xyz' dans votre code, mais en vérifiant seulement 'xyz'. –

+0

Et btw, il serait plus facile de stocker tous ces caractères dans un tableau '$ chars [" A "] $ chars [" B "] ....' –

+0

Oh mec, je me sens comme un boob total pour avoir raté ça. Merci! J'ai changé $ solutionCharacter en "char". $ solutionCharacter et il a sauté juste comme je le voulais. J'ai opté pour une classe pour deux raisons sur ce script: Lorsque j'utilise des tableaux pour faire le changement de caractères, j'ai fini par utiliser six tableaux en utilisant un objet de classe coupé en deux. L'autre raison, comme vous l'avez peut-être déjà deviné, est que je ne fais que commencer des cours en PHP5. La dernière fois que je les ai fait était en PHP3, donc je suis un peu rouillé! – Eric

0

la deuxième déclaration echo n'est pas interrogation en fait l'objet, il sort une chaîne dans laquelle $solutionCharacter est pu t. Ce n'est pas une preuve que la propriété existe réellement. Ensuite, vous interrogez la propriété dans le class de $puzzleCharacters_encrypted. Il se peut que la propriété ne soit pas définie dans la classe, mais dans l'objet.

Qu'est-ce qui se passe si vous essayez

if (property_exists($puzzleCharacters_encrypted, $solutionCharacter)) 

?

+0

Je reçois le même résultat. $ puzzle_solution et $ puzzle_encryption affichent la même valeur. – Eric

+0

En outre, j'ai lu que les propriétés privées ne seront pas vu en PHP <5.3, donc j'ai changé toutes les propriétés de privé à public. – Eric

+0

J'ai aussi essayé ce qui suit pour le paramètre de classe: $ puzzleCharacters (la classe d'origine - renvoie une erreur) "puzzleCharacters" - même résultat pour puzzle_solution $ et puzzle_encryption $ "puzzleCharacters_encrypted" - puzzle_solution $ et puzzle_encryption – Eric