Jméno proměnné

21. 03 2009 | 11.02

php V Php si tvořim komplexní systém, který mam v plánu využívat pro tvorbu webů. Nechybí tam ani správa chyb. Jenže jsem narazil na problém. Měl jsem v úmyslu, že si zkontroluju, jestli nějaká proměnná, kterou potřebuju, existuje a pokud ne, napíšu do popisu chyby která proměnná neexistuje. Jenže jak na to? Vyspat obsah proměnný neni problém, ale její jméno? Tak jak se vyskytuje v kódu?

Začal jsem teda hledat na netu...našel jsem několik stránek, ale všechny vedly k jednomu kódu - funkci jménem vname. Nejdříve jsem našel stránku: http://lists.evolt.org/archive/Week-of-Mon-20060925/185326.html a posléze http://www.dbforums.com/php/1609705-how-get-variable-name-string-php.html, která mě dovedla na stránku php.net - kontkrétně http://us2.php.net/manual/en/language.variables.php#49997.

Funkce vname v zásadě prochází pole definovaných proměnných v kódu a podle toho se dá najít právě ta, co mě zajímá.

Zajásal jsem, protože funkce vname, je přesně to, co potřebuju. Ale aby to nebylo tak jednoduchý, nadšení brzo opadlo...jak už jsem napsal o pár řádků výše, tvořim komplexní systém a to znamená, že zpráva chyb má vlastní třídu -> co z toho vyplývá? Že kontrolu exitence proměnné provádim na jiném místě kódu - předávám proměnnou do fukce a když právě z té funkce zavolám vname(...), vrátí mi to sice jméno proměnné, ale to je jméno se kterým pracuju ve funkci. Vysvětlím na příkladě:

<?php
  
  existuje_promenna($_GET["jmeno"]);
  
  echo "Vítej: ".$_GET["jmeno"];
  exit;

  function existuje_promenna($promenna) {
    if (!isset($promenna)) {
      echo "Promenna ".vname($promenna, get_defined_vars())." neexistuje!";
      exit;
    }
  }

?>

Pokud proměnná $_GET["jmeno"] nebude existovat, nevypíše se mi, že neexistuje $_GET["jmeno"], ale $promenna. Ani kdybych si předával do funkce zároveň i jméno proměnné (že bych do parametru vložil vname(...)) to nesplňuje přesně to, co bych chtěl, protože třeba právě $_GET["jmeno"] nevypíše žádné jméno proměnné - zná to pouze kdybych napsal $_GET.

Až budu hotov s ostatníma věcma, tak to zkusim ještě poladit a pokud se dostanu ke zdárnému řešení, napíšu to sem. Zatim jsem ještě našel článek, kde je funkce vname pěkně rozepsaná, tak třeba by se z toho dalo něco pochytit: http://mach13.com/how-to-get-a-variable-name-as-a-string-in-php.