php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger

PHP Einsteiger PHP Problemlösungen für Spracheinsteiger
Archive: 2004, 2004/2, 2005, 2005/2, 2006, 2007, 2008, 2009, 2010,

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 16.04.2011, 14:14  
Neuer Benutzer
 
Registriert seit: 14.04.2008
Beiträge: 16
PHP-Kenntnisse:
Fortgeschritten
quasiman
Standard Name einer Variablen soll in einer Variablen stehen

Hallo,

das folgende Skript gibt mir erwartungsgemäß das Array $_GET aus:
PHP-Code:
<?php
$var 
'_GET';
var_dump($$var);
?>
Wenn ich nun
PHP-Code:
<?php
$var 
'_REQUEST';
var_dump($$var);
?>
aufrufe, dann bekomme ich "Notice: Undefined variable: _REQUEST". Warum gibt mir das zweite Skript nicht das Array $_REQUEST aus, sondern diese Meldung? Gibt es eine Möglichkeit, auf das Array $_REQUEST so zuzugreifen, wie ich es im ersten Skript mit der $_GET-Variablen gemacht habe? [var_dump($_REQUEST) gibt das Array selbstverständlich aus.]

PHP Version 5.3.2-1ubuntu4.7

Vielen Dank und schöne Grüße ...
quasiman ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 16.04.2011, 14:20  
Moderator¹
 
Registriert seit: 28.03.2010
Beiträge: 7.470
PHP-Kenntnisse:
Fortgeschritten
ChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer Anblick
Standard

Zitat:
Zitat von quasiman Beitrag anzeigen
Warum gibt mir das zweite Skript nicht das Array $_REQUEST aus, sondern diese Meldung?
Keine Ahnung - ich bekomme keine solche Meldung, sondern den Inhalt von $_REQUEST angezeigt.

Zitat:
Gibt es eine Möglichkeit, auf das Array $_REQUEST so zuzugreifen, wie ich es im ersten Skript mit der $_GET-Variablen gemacht habe?
Schon allein das Vorhaben deutet auf einen Designfehler hin.
Wenn du erst mal beschreibst, was du eigentlich erreichen willst, finden wir vielleicht sinnvollere Alternativen.
__________________
RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
ChrisB ist offline   Mit Zitat antworten
Alt 16.04.2011, 14:24  
Moderator
 
Benutzerbild von Asipak
 
Registriert seit: 18.07.2005
Beiträge: 4.072
Asipak sorgt für eine eindrucksvolle AtmosphäreAsipak sorgt für eine eindrucksvolle Atmosphäre
Standard

Ich bekomme die Fehlermeldung auch. http://stackoverflow.com/questions/2...able-variables mag da weiterhelfen.

Doch auch ich frage mich, wozu du an dieser Stelle variable Variablen benötigst.
Asipak ist offline   Mit Zitat antworten
Alt 16.04.2011, 15:07  
Erfahrener Benutzer
 
Registriert seit: 26.12.2010
Beiträge: 175
PHP-Kenntnisse:
Anfänger
elise befindet sich auf einem aufstrebenden Ast
Standard

Hat mich grad interessiert..

Bin dafür dem möglicher Hinweis aus Asipaks Link nachgegangen:

http://php.net/manual/de/ini.core.php

und dort mittig:
Zitat:
auto_globals_jit boolean

Wenn eingeschaltet werden die Variablen SERVER und ENV erzeugt, sobald diese das erste mal verwendet werden (Just In Time) anstelle des Ausführungsbeginns des Skriptes. Wenn diese Variablen in einem Skript nicht verwendet werden wird das Einschalten dieser Einstellung einen Geschwindigkeitszuwachs hervorbringen.

Die PHP Einstellungen register_globals, register_long_arrays, und register_argc_argv müssen ausgeschaltet sein, damit diese Einstellung Wirkung zeigt. Seit PHP 5.1.3 ist es nicht mehr notwendig register_argc_argv auszuschalten.

Warnung

Ob SERVER und ENV Variablen benutzt werden wird bereits zur Kompilationszeit geprüft, ein Zugriff über variable Variablen führt daher nicht dazu das diese initialisiert werden.
Der passende Code aus php_variables.c:
Code:
/* {{{ php_hash_environment
 */
zend_bool jit_initialization = (PG(auto_globals_jit) && !PG(register_globals) && !PG(register_long_arrays));
//....
//....

/* Create _REQUEST */
if (!jit_initialization) {
	zend_auto_global_disable_jit("_REQUEST", sizeof("_REQUEST")-1 TSRMLS_CC);
	php_auto_globals_create_request("_REQUEST", sizeof("_REQUEST")-1 TSRMLS_CC);
}
könnte damit zusammen hängen.
__________________
OSL♥
elise ist offline   Mit Zitat antworten
Alt 16.04.2011, 15:11  
Neuer Benutzer
 
Registriert seit: 14.04.2008
Beiträge: 16
PHP-Kenntnisse:
Fortgeschritten
quasiman
Standard

Schönen Dank für die Antworten. Dank Asipaks Link habe ich gerade auf http://www.php.net/manual/en/languag...s.variable.php den Hinweis "Please note that variable variables cannot be used with PHP's Superglobal arrays within functions or class methods." gelesen, was mir bislang unbekannt war und was dazu führt, dass ich mein Vorhaben sowieso nicht in der Form umsetzen kann. Ich hatte mir folgendes ausgedacht.

PHP-Code:
<?php
/* Dieses Script funktioniert bekannterweise nicht.*/

/* checkKeys() überprüft im Array $arrName alle Werte
 * von den Schlüsseln $arrKeys mit der Funktion $chkFunction.
 * Rückgabe: true, falls alle Tests bestanden werden.
 *           false, im anderen Fall.*/
function checkKeys($arrName$chkFunction$arrKeys) {
    foreach (
$arrKeys as $key) {
        if (!
array_key_exists($key, $$arrName)) {
            return 
false;
        }
        if (!
$chkFunction($$arrName[$key])) {
            return 
false;
        }
    }
    return 
true;
}
/* Ein Beispielaufruf könnte so aussehen. Aber wegen der eben
 * zitierten Notiz auf php.net funktioniert das ja leider
 * alles nicht.*/
if (checkKeys('_GET''ctype_digit', array('val1''val2'))) {
    echo 
"Alles Arraykeys gültig";
} else {
    echo 
"Mindestens ein Arraykey ungültig.";
}
?>
Zitat:
Schon allein das Vorhaben deutet auf einen Designfehler hin.
Ich hätte das eigentlich für eine praktische und übersichtliche Sache gehalten, wenn es funktioniert hätte.

Geändert von quasiman (16.04.2011 um 15:33 Uhr).
quasiman ist offline   Mit Zitat antworten
Alt 16.04.2011, 15:27  
Erfahrener Benutzer
 
Registriert seit: 25.05.2010
Beiträge: 852
PHP-Kenntnisse:
Anfänger
Trainmaster wird schon bald berühmt werden
Standard

Ein Fall für http://php.net/manual/de/control-structures.switch.php oder du bastelst dir eine vernünftige Request-Klasse.

Geändert von Trainmaster (16.04.2011 um 15:30 Uhr).
Trainmaster ist offline   Mit Zitat antworten
Alt 16.04.2011, 15:44  
Moderator¹
 
Registriert seit: 28.03.2010
Beiträge: 7.470
PHP-Kenntnisse:
Fortgeschritten
ChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer Anblick
Standard

Zitat:
Zitat von quasiman Beitrag anzeigen
PHP-Code:
/* Ein Beispielaufruf könnte so aussehen. Aber wegen der eben
 * zitierten Notiz auf php.net funktioniert das ja leider
 * alles nicht.*/
if (checkKeys('_GET''ctype_digit', array('val1''val2'))) { 
Dann übergebe nicht '_GET', sondern $_GET - und schon „funktioniert“ das.
(Zugriff über $$ in der Funktion dann natürlich auch entsprechend umbauen bzw. entfernen.)
__________________
RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
ChrisB ist offline   Mit Zitat antworten
Alt 16.04.2011, 15:50  
Neuer Benutzer
 
Registriert seit: 14.04.2008
Beiträge: 16
PHP-Kenntnisse:
Fortgeschritten
quasiman
Standard

Danke für die weiteren Antworten. Ich glaube, ich mache das jetzt einfach erstmal so, dass ich direkt das ganze Array übergebe. Folgedes Skript leistet also das Gewünschte ohne variable Variablennamen.
PHP-Code:
<?php
/* checkKeys() überprüft im Array $arr alle Werte
 * von den Schlüsseln $arrKeys mit der Funktion $chkFunction.
 * Rückgabe: true, falls alle Tests bestanden werden.
 *           false, im anderen Fall.*/
function checkKeys($arr$chkFunction$arrKeys) {
    foreach (
$arrKeys as $key) {
        if (!
array_key_exists($key$arr)) {
            return 
false;
        }
        if (!
$chkFunction($arr[$key])) {
            return 
false;
        }
    }
    return 
true;
}
/* Ein Beispielaufruf könnte so aussehen.*/
if (checkKeys($_REQUEST'ctype_digit', array('val1''val2'))) {
    echo 
"Alles Arraykeys ok";
} else {
    echo 
"Mindestens ein Arraykey nicht ok";
}
?>
Aufrufe über
script.php?val1=12&val2=23&val3=aoisdjf
script.php?val1=12&val2=23
melden Erfolg. Aufrufe über
script.php?val1=12&val2=23asdf
script.php
script.php?val1=12
melden Misserfolg. Also alles wie gewünscht. Ist das nun immernoch ein Designfehler?

Schöne Grüße ...
quasiman ist offline   Mit Zitat antworten
Alt 16.04.2011, 15:53  
Moderator¹
 
Registriert seit: 28.03.2010
Beiträge: 7.470
PHP-Kenntnisse:
Fortgeschritten
ChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer Anblick
Standard

Zitat:
Zitat von quasiman Beitrag anzeigen
Ist das nun immernoch ein Designfehler?
Der Hinweis war schon explizit auf die Verwendung variabler Variablen bezogen.

Der Programmierer wird doch wissen, auf welche Variable er die Funktion an einer bestimmten Stelle im Script anwenden will - also kann er deren Bezeichner problemlos direkt angeben, überhaupt keine Notwendigkeit vorhanden, dass über Übergabe des Namens in Stringform zu machen.

In der Hinsicht ist das mit direkter Übergabe von $_REQUEST als Parameter also OK.
__________________
RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
ChrisB ist offline   Mit Zitat antworten
Alt 16.04.2011, 15:56  
Neuer Benutzer
 
Registriert seit: 14.04.2008
Beiträge: 16
PHP-Kenntnisse:
Fortgeschritten
quasiman
Standard

@ChrisB: Ich habe deine Antwort von 13:44 Uhr leider nicht mehr gelesen, bevor ich meine abgeschickt habe. Deutet die Tatsache, dass du das Wort "funktioniert" in Anführungsstriche gesetzt hast, darauf hin, dass du diese Lösung nach wie vor für einen Designfehler hälst?
quasiman ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Fixe Anzahl als variablen speichern wernersbacher PHP Einsteiger 7 08.03.2011 20:59
Frame drucken bei variablen Name und ID chandlerP PHP Einsteiger 5 25.01.2011 19:15
[Erledigt] E-mail Versand Fehler Chacky PHP Einsteiger 29 25.11.2010 13:31
PHP-MYSQL Funktionen: Seltsames Problem (Script mit variablen Variablen) tonaus Datenbanken 15 11.10.2010 19:51
PHP5 und Variablen initialisieren kojak2008 PHP Tipps 2010 9 17.08.2010 14:33
[jQuery] php Variablen verwenden TroTz HTML, Usability und Barrierefreiheit 1 21.03.2010 15:41
Variablen mit Formular übergeben 1988UR PHP Tipps 2010 4 23.02.2010 09:29
[Erledigt] PHP Variablen + Formulare Templerschaf PHP Tipps 2009 46 18.03.2009 23:16
Wert statt Name einer Variablen ausgeben ThinkPink PHP Tipps 2008 5 25.09.2008 11:05
E-Mail Formular: Variablen in $message einfügen? thomas108 PHP Tipps 2008 9 02.06.2008 12:33
Variable aus Variablen zusammensetzen juhuwoorps PHP Tipps 2007 1 28.11.2005 21:50
Problem mit einfachem Mail()-Skript PHP Tipps 2005-2 5 08.10.2005 17:39
Formular name bzw. Variablen in Array einlesen nieselfriem PHP Tipps 2005 1 27.05.2005 10:23
Variablen per adresse übergeben rocco PHP Tipps 2004 7 24.07.2004 12:03

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
in einer variablen soll der name, \undefined variable: _request\, php namen ineer variablen drucken, php \name einer variablen\, php variablen namen drucken

Alle Zeitangaben in WEZ +2. Es ist jetzt 15:37 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum