Je travaille depuis quelques semaines à l'écriture d'une classe PHP et j'aime penser que j'ai une bonne connaissance des bases, mais je suis un peu perplexe.PHP Variables de classe vidées dans While Loop
Comme exemple simplifié de ce que je fais:
J'ai déclaré et instancié une variable publique ($ myURL) dans ma classe (someClass) et dans un fichier externe (config.php) à la classe rempli la variable avec une URL (http://demo.com).
Dans une fonction (make_array()) dans la même classe, j'utilise la variable déclarée ($ myURL) dans une boucle while() pour construire un tableau associatif de données que j'utilise en dehors de la classe pour générer une sortie listée (output.php). Une fois que j'ai défini la variable en utilisant une fonction de classe (set_myurl ($ url)) dans le fichier externe (config.php), je peux y accéder assez facilement en dehors du fichier de classe en utilisant echo pour imprimer l'URL de l'ensemble à la page. Le problème survient lorsque je parcours le tableau et que je veux définir la variable prédéfinie ($ myURL) sur divers sous-tableaux du tableau associatif que je construis avec la fonction make_array() dans ma classe fichier. La fonction make_array() prend un résultat MSSQL $ et boucle les lignes créant le tableau en insérant l'URL si elle n'existe pas et le second argument ($ add_my_url) est défini sur true.
Dans la fonction, la variable définie devient vide mais reste définie comme je l'ai testé avec les fonctions PHP intégrées empty(), isset() et is_null() dans le but de résoudre le problème.
Je me demande si quelqu'un a des connaissances ou de l'expérience à ce sujet.
Une brève idée de ce que je fais
<?php
class someClass {
var $myURL = '';
public function set_myurl($url){
$this->myURL = $url;
}
public function make_array($db_result_array, $add_my_url = false){
$new_array = array();
while($row = $db_result_array){
// build array
$array = array(
'Amount' => $row['Amount'],
'Description' => $row['Description'],
'URL' => ($add_my_url ? (!$row['URL'] ? $this->myURL : $row['URL']) : $row['URL'])
);
// merge array
$new_array[] = $array;
}
return $new_array;
}
}
?>
<?php
// config.php
$myClass = new someClass;
$myClass->set_myurl('http://demo.com');
// this works and displays: http://demo.com
echo $myClass->myURL;
?>
Je sais que cet exemple est vraiment abstraite, mais je ne voulais pas d'afficher les lignes complètes de 2000 de PHP.
Si vous avez besoin de plus de précisions, n'hésitez pas à demander. Je suis assez confiant que j'ai réduit le problème à cette fonction et cette boucle while().
Merci.
Votre exemple fonctionne comme prévu pour moi. – blinry