Passage de variable entre les fonctions php
Ci-dessous est une version modifiée de mon code:
<?php
include ('login_info.php');
class modernCMS {
var $host;
var $username;
var $password;
var $db;
var $url;
function connect(){
$con = mysql_connect($this->host, $this->username, $this->password);
mysql_select_db($this->db, $con) or die(mysql_error());
mysql_set_charset('utf8');
}
function get_coordinates(){
$sql ="select lat, lng from postcodes LIMIT 1;";
$res = mysql_query($sql) or die(mysql_error());
while($row = mysql_fetch_assoc($res)){
$lat = $row['lat'];
$lng = $row['lng'];
}
}
function get_name(){
$sql ="select name from places WHERE lat=$lat AND lng=$lng LIMIT 1;";
$res = mysql_query($sql) or die(mysql_error());
while($row = mysql_fetch_assoc($res)){
$name = $row['name'];
echo $name;
}
}
?>
Puis, dans un document séparé, j'ai un include du fichier ci-dessus. J'ai appeler la fonction obtenir le nom à l'aide de l'suivantes:
<?=$obj->get_name()?>
get_name contient en fait un calcul pour le calcul de la distance entre deux points toutefois, en raison de ses un long calcul, je l'ai laissé de l'exemple ci-dessus.
Il est important que je peux utiliser $obj->get_name() pour obtenir la sortie de $lat et $lng
- vous pouvez passer en paramètres
- Si vous avez besoin d'un getter et setter, faire un système de Coordonnées de l'objet. PHP est un langage de programmation orientée objet 🙂
- Vous avez besoin de savoir sur la portée des variables. Cependant, en utilisant des choses comme des arguments, des retours, des tableaux, des objets et des propriétés sont tous de BEAUCOUP préférable à l'utilisation de variables globales.
Vous devez vous connecter pour publier un commentaire.
Vous êtes en cours d'exécution dans un établissement de la portée d'émission. Les variables ne sont disponibles que pour la fonction qui les a déclarés. Pour les rendre disponibles, vous pouvez soit passer les variables de la fonction explicitement (vous devez assurez-vous de toujours faire appel à
get_coordinates()
avantdisplay_coordinates()
bien que, sinon, vous avez pas défini de valeurs), ou l'utilisation de variables globales (mauvaise idée).La meilleure méthode est sans doute de faire une classe pour elle (même si cela dépend de comment vous avez l'intention de l'utiliser). Vos variables seront toujours à portée, et vous ne courrez pas le risque d'essayer d'exécuter la
display_coordinates()
fonction avant d'avoir initialisé les variables.Vous devriez lire sur La Portée Des Variables et Les Classes et les Objets pour comprendre plus au sujet de cette.
De mettre cela ensemble avec votre code original, vous voulez faire quelque chose comme cela,
Modifier après la question à jour
Il y a quelques mauvaises pratiques dans votre code, mais voici quelques étapes rapides pour obtenir ce que vous voulez.
Sans rapport avec votre question, mais vous devriez aussi lire sur "SQL Injection" comme requête dans
get_name()
est vulnérable. Pas un gros problème ici, puisque les données à partir de votre autre requête de toute façon, mais toujours de bonne pratique de ne pas utiliser les paramètres directement dans une chaîne de requête.$coordinate
ne sera disponible que dans cette fonction distincte. Vous ne seriez pas en mesure d'appeler$coordinate->display();
à partir d'une autre fonction, sauf si vous faites$coordinate
mondiale, ou de la passer dans la deuxième fonction.new Coordinate(...)
et retour les nouvelles coordonnées de l'objet. Il peut ensuite être transmis à toute autre fonction. Pas besoin de variables globales. (Riche, vous pourriez peut-être mettre à jour votre réponse à montrer comment vous pourriez le faire-c'est déjà une bonne réponse, ou j'avais l'ajouter à la mienne).Fonctions de fonctionner à l'intérieur de la portée de la fonction, de sorte que les variables que vous avez mis dans
get_coordinates()
sont des variables locales. Pour créer des variables globales, vous pouvez utiliser le mot clé global:Ou
$GLOBALS
tableau:Toutefois, cela peut ne pas être la meilleure façon de mettre en/accéder à ces variables, car toute fonction peut modifier leur état à tout moment, et vous devez appeler une fonction à définir avant d'appeler les autres à les afficher. Si vous pouvez décrire votre but, vous pourriez être en mesure d'obtenir les meilleurs conseils.
Un mieux façon d'y parvenir est d'utiliser une classe, et l'objet sur lequel vous en avez besoin (ce simple exemple n'est pas de montrer le bon l'encapsulation, mais c'est un bon point de départ):
Une autre façon qui est couramment utilisé en PHP, c'est passer des choses dans les tableaux associatifs (tableaux avec des cordes pour les indices). Je ne préfère pas cette habitude, car le tableau ne permet pas de déclarer ce qu'il a l'intention de tenir, mais c'est une option:
global
) que j'ai oublié de déclarer les variables globales dans la seconde fonction. J'ai mis à jour pour inclure le code complet qui fonctionne pour moi. Quelle est la version de PHP que vous utilisez? Êtes-vous de modifier le code à tous?Une seule façon de faire:
Qu'en Session?
https://www.php.net/manual/en/reserved.variables.session.php
La Création D'Une Nouvelle Session
Arriver Session
La Mise À Jour De Session
La Suppression De La Session De
Créer un
Coordinate.class.php
fichier:Changement d'un autre post.. je pense que la meilleure façon: