Sziasztok!
Van egy probléma amit nem tudok megoldani. A feladat az lenne, hogy egy paraméterként átadott tömb kulcsát megszüntessem. A kód valahogy így nézne ki:
public static function remove(array $keys)
{
$name = '$GLOBALS["_REQUEST"]';
foreach($keys as $key) {
$name .= '["'.$key.'"]';
}
// Pl.: $name = '$GLOBALS["_GET"]["foo"]["bar"]';
unset($name);
}
A probléma viszont, hogy ebben az esetben az unset() függvény a $name változót szünteti meg, nem pedig annak az értékétben lévő tömböt. Van valakinek ötlete a probléma megoldására?
- 803 megtekintés
Hozzászólások
Ha
$name = '$GLOBALS["_GET"]["foo"]["bar"]';
akkor
$x = $GLOBALS["_GET"]["foo"]["bar"];
ugyanaz, mint
$x = $$name;
Tehat, probalj ki esetleg egy
unset($$name);
valtoztatot, hatha...
- A hozzászóláshoz be kell jelentkezni
Sajnos nem működik... De az ötlet jó, elindulok ezen a vonalon.
- A hozzászóláshoz be kell jelentkezni
akkor inkabb
eval()
, valahogy igy:
eval("unset($name);");
A user input sanitising-re azert figyelj, kemenyen...
- A hozzászóláshoz be kell jelentkezni
Ez működik, köszönöm! Azért még várok egy kicsit, mert egy eval() nélküli megoldás jobb lenne, de legalább már van egy működő kód. :)
- A hozzászóláshoz be kell jelentkezni
eval("$name = $$name;");
ez se jobb. lehet ezt eval nélkül?
- A hozzászóláshoz be kell jelentkezni
Azt hiszem sejtem miért nem működik:
Note: Variable variables
Superglobals cannot be used as variable variables inside functions or class methods.
Forrás: http://us2.php.net/manual/en/language.variables.superglobals.php
- A hozzászóláshoz be kell jelentkezni
egyébként ez mivel jobb mint az unset($GLOBALS["_GET"]["foo"]["bar"][...]);
magában?
- A hozzászóláshoz be kell jelentkezni
Semmivel, az eredmény ugyanaz mind a kettő esetén. Csak van egy request-et kezelő osztályunk set(), get(), has() metódusokkal. Mindenhol ezeket a metódushívásokat használjuk az egyszerű értékátadás helyett. Ebből az osztályból egyedül már csak a remove() metódus hiányzik, hogy teljes legyen. Jelenleg ahogy te is írtad, az unset($GLOBALS[...]) módszerrel oldjuk meg a tömb elemek megszüntetését, de szebb és áttekinthetőbb lenne a kód, ha erre is a request osztályunkat tudnánk használni.
- A hozzászóláshoz be kell jelentkezni