php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2007

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 27.12.2005, 12:14  
Erfahrener Benutzer
 
Registriert seit: 26.05.2008
Beiträge: 200
PHP-Kenntnisse:
Fortgeschritten
[-UFO-]Melkor befindet sich auf einem aufstrebenden Ast
Standard Variablen anhand ihrer Referenz löschen?

Ich habe eine Funktion, die eine Variable prüft.
Die zu prüfende Variable wird als Referenz übergeben und soll unter bestimmten Bedingungen, gelöscht werden.
Nun funktioniert folgendes aber nicht:
Code:
function checkType(&$var){
    //Prüfung der Variablen: [...]
    if($blnReturn == FALSE){
        unset($var);    
    }
}
$int = 500;
checkType($int);
if(isset($int)){
    echo 'int: '.$int.'
';
}
Code:
int: 500
Die nächste Möglichkeit an die ich denke, ist das Löschen über der den $GLOBALS-Array.
Code:
function checkType(&var,$key){
    //Prüfung der Variablen: [...]
    if($blnReturn == FALSE){
        unset($GLOBALS[$key]);    
    }
}
$int = 500;
checkType($int);
if(isset($int)){
    echo 'int: '.$int.'
';
}
Das funktioniert zwar, sieht mir aber doch noch etwas unschön aus. Gibt es vielleicht eine schönere Möglichkeit dafür?[/php]


//Edit sagt: Die [php]-Tags funktionieren nicht, da wird nur
Code:
PHP-Code:
(php-code
ausgegeben, darum das ganze hier in den [code]-Tags.
[-UFO-]Melkor ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 27.12.2005, 12:32  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Beim 1. Beispiel muss es &$var statt &var heißen, hat das keinen Parse-Error verursacht? *sich-wunder*

Wozu möchtest du eigentlich Variablen löschen? Vielleicht ist deine Struktur nur unsauber und wir können dir bessere Vorschläge geben.
Zergling-new ist offline  
Alt 27.12.2005, 12:44  
Gast
 
Beiträge: n/a
Standard

Wie so oft wirkt ein Blick in die Doku Wunder...

Zitat:
Zitat von php.net/unset
If a variable that is PASSED BY REFERENCE is unset() inside of a function, only the local variable is destroyed. The variable in the calling environment will retain the same value as before unset() was called.
 
Alt 27.12.2005, 12:47  
Erfahrener Benutzer
 
Registriert seit: 26.05.2008
Beiträge: 200
PHP-Kenntnisse:
Fortgeschritten
[-UFO-]Melkor befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von Zergling
Beim 1. Beispiel muss es &$var statt &var heißen, hat das keinen Parse-Error verursacht? *sich-wunder*
Ups, war ein Schreibfehler hier im Forum, im Code war es korreckt.

Zitat:
Zitat von Zergling
Wozu möchtest du eigentlich Variablen löschen? Vielleicht ist deine Struktur nur unsauber und wir können dir bessere Vorschläge geben.
Tja, gute Frage. In meinem "Projekt" habe ich es regelmäßig mit einigen GET- und POST-Variablen zu tun.
Um sie zu Prüfen (leer/nicht leer, Wert erlaubt, Typ erlaubt) habe ich eine recht umfangreiche Funktion (ca. 165 Zeilen), die neben dem Prüfen auch Type-Konventionen durchführt. Die jedesmal aufzurufen dürfte nicht umbedingt sehr schnell sein. Den Wert zu löschen und das ganze mit empty zu prüfen ist auch nicht möglich, denn die Variablen dürfen durchaus den Wert 0 haben.
Sie immer mit einem superMegaLangemStandartWert zu belegen sieht doch recht unschön aus. Also will ich sie löschen um im nachhinein mit isset prüfen zu können, ob sie existieren.
[-UFO-]Melkor ist offline  
Alt 27.12.2005, 12:50  
Erfahrener Benutzer
 
Registriert seit: 26.05.2008
Beiträge: 200
PHP-Kenntnisse:
Fortgeschritten
[-UFO-]Melkor befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von karl-150
Wie so oft wirkt ein Blick in die Doku Wunder...

Zitat:
Zitat von php.net/unset
If a variable that is PASSED BY REFERENCE is unset() inside of a function, only the local variable is destroyed. The variable in the calling environment will retain the same value as before unset() was called.
Das hilft leider nicht.
Das ganze kurz mit unset() zu testen, war ja kein Problem. Und das Nachschlagen in der Referenz war auch kein Problem. Mir geht es nur darum, Alternativlösungen zu finden, und die stehen so nicht direkt in der Referenz.
[-UFO-]Melkor ist offline  
Alt 27.12.2005, 12:56  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Das verstehe ich nicht so ganz, ich habe eine statische Validate-Klasse, die prüft oder konvertiert, z.B. isUINT() oder toUINT() (für unsigned integer, meistens für eine ID)
Ich prüf das halt per

isset($_POST['id']) && Validate::isUINT($_POST['id'],/* $autoConvert = */ false)

und da brauch ich eigentlich nie ein unset, höchstens mal ein emty()-Check.
Und 165 Zeilen krieg ich selbst für String-, E-Mail- oder PLZ-Tests nicht zusammen.

Zeig doch mal konkrete Codeblöcke..
Zergling-new ist offline  
Alt 27.12.2005, 13:09  
Erfahrener Benutzer
 
Registriert seit: 26.05.2008
Beiträge: 200
PHP-Kenntnisse:
Fortgeschritten
[-UFO-]Melkor befindet sich auf einem aufstrebenden Ast
Standard

Die Funktion hat drei Parameter. Die Variable $var, den Typ, den sie nach der Konvertierung haben soll, und den Parameter $blnNull, mit dem angegeben wird, ob die Variable als leer zählt, wenn sie entweder >= 0 oder '' ist.
Das (für mich) schöne an dieser Funktion ist halt, das jede Typ-Konvertierung genau festgelegt ist und bei bedarf geändert werden kann.
Würde ich das ganze in eine Klasse mit verschiedenen Methoden schreiben, würde es vielleicht auch kürzer werden, aber im Moment bin ich mit einer Funktion ganz glücklich.
Die gesamte Funktion:
PHP-Code:
    define('CB_NULL'TRUE); //Can Be 0
    
define('CNB_NULL'FALSE); //Can Not Be 0
    
function checkType(&$var$strTyp$blnNull CB_NULL){
             
$strVarTyp gettype($var); //Ursprungstyp
             
$blnReturn FALSE;
             
//Verzweigung je nach gewünschtem Typ
             
switch($strTyp){
                 case 
'boolean':
                      switch(
$strVarTyp){
                          case 
'boolean':
                               
$blnReturn TRUE;
                               break;

                          case 
'integer':
                               
$var $var TRUE FALSE;
                               
$blnReturn TRUE;
                               break;

                          case 
'double':
                               
$var $var TRUE FALSE;
                               
$blnReturn TRUE;
                               break;

                          case 
'string':
                               if(
$var == '' AND $blnNull == CNB_NULL){
                                       break;
                               }
                               
$var = ($var == 'true' OR $var == 'TRUE') ? TRUE FALSE;
                               
$blnReturn TRUE;
                      }
                      break;

                 case 
'integer':
                      switch(
$strVarTyp){
                          case 
'boolean':
                               
$var = (int) $var;
                               if(
$blnNull == CNB_NULL AND $var == 0){
                                           
$blnReturn FALSE;
                               }
                               else{
                                   
$blnReturn TRUE;
                               }
                               break;

                          case 
'integer':
                               if(
$blnNull == CNB_NULL AND $var <= 0){
                                           
$blnReturn FALSE;
                               }
                               else{
                                   
$blnReturn TRUE;
                               }
                               break;

                          case 
'double':
                               
$var = (int) $var;
                               if(
$blnNull == CNB_NULL AND $var <= 0){
                                           
$blnReturn FALSE;
                               }
                               else{
                                   
$blnReturn TRUE;
                               }
                               break;

                          case 
'string':
                               if(
$var == '' AND $blnNull == CNB_NULL){
                                       break;
                               }
                               
$var = (int) $var;
                               if(
$blnNull == CNB_NULL AND $var <= 0){
                                           
$blnReturn FALSE;
                               }
                               else{
                                   
$blnReturn TRUE;
                               }
                               break;
                      }
                      break;

                 case 
'double':
                      switch(
$strVarTyp){
                          case 
'boolean':
                               
$var = (double) $var;
                               if(
$blnNull == CNB_NULL AND $var == 0){
                                           
$blnReturn FALSE;
                               }
                               else{
                                   
$blnReturn TRUE;
                               }
                               break;

                          case 
'integer':
                               
$var = (double) $var;
                               if(
$blnNull == CNB_NULL AND $var <= 0){
                                           
$blnReturn FALSE;
                               }
                               else{
                                   
$blnReturn TRUE;
                               }
                               break;

                          case 
'double':
                               if(
$blnNull == CNB_NULL AND $var <= 0){
                                           
$blnReturn FALSE;
                               }
                               else{
                                   
$blnReturn TRUE;
                               }
                               break;

                          case 
'string':
                               if(
$var == '' AND $blnNull == CNB_NULL){
                                       break;
                               }
                               
$var = (double) $var;
                               if(
$blnNull == CNB_NULL AND $var <= 0){
                                           
$blnReturn FALSE;
                               }
                               else{
                                   
$blnReturn TRUE;
                               }
                               break;
                      }
                      break;

                 case 
'string':
                      switch(
$strVarTyp){
                          case 
'boolean':
                               switch(
$var){
                                   case 
TRUE:
                                        
$var 'true';
                                        break;
                                   default:
                                       
$var 'false';
                               }
                               
$blnReturn TRUE;
                               break;

                          case 
'integer':
                               if(
$var == AND $blnNull == CNB_NULL){
                                       break;
                               }
                               
$var = (string) $var;
                               
$blnReturn TRUE;
                               break;

                          case 
'double':
                               if(
$var === AND $blnNull == CNB_NULL){
                                       break;
                               }
                               
$var = (string) $var;
                               
$blnReturn TRUE;
                               break;

                          case 
'string':
                               if(
$var == '' AND $blnNull == CNB_NULL){
                                       break;
                               }
                               else{
                                   
$blnReturn TRUE;
                               }
                               break;
                      }
                      break;
             }
             switch(
$blnReturn){
                 case 
FALSE:
                      
//Und hier liegt halt dann das Problem, wo ich die Variable igrendwie löschen will.
                      
unset($var);
             }
             return 
$blnReturn;
    } 
[-UFO-]Melkor ist offline  
Alt 27.12.2005, 13:17  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Wenn du nichts ändern willst, verweise ich auf karl-150's Hinweis

Warum aber übergibst du die Variable als Referenz UND aber schmeißt sie als Rückgabewert zurück (return)?
Zergling-new ist offline  
Alt 27.12.2005, 13:26  
Erfahrener Benutzer
 
Registriert seit: 26.05.2008
Beiträge: 200
PHP-Kenntnisse:
Fortgeschritten
[-UFO-]Melkor befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von Zergling
Wenn du nichts ändern willst, verweise ich auf karl-150's Hinweis
Dann werde ich es wohl mit einem übergebenen key machen und dann über den $GLOBALS-Array löschen.
Zitat:
Warum aber übergibst du die Variable als Referenz UND aber schmeißt sie als Rückgabewert zurück (return)?
return schmeißt die Variable $blnReturn zurück, die true ist, wenn die Variable bestehen bleibt, oder false, wenn sie gelöscht wurde.

Dank euch für eure Hilfe
[-UFO-]Melkor ist offline  
Alt 27.12.2005, 13:31  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Sorry hab mich verlesen.
Zergling-new ist offline  
 


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
Klasse statt globaler Variablen ecomeback PHP-Fortgeschrittene 6 15.07.2008 16:30
Übergeben von Variablen an in PHP eingebundenes Perl-Script shredder01 PHP Tipps 2008 3 04.04.2008 09:25
Datei mit Variablen so includen, dass Variablen nutzbar? BartTheDevil89 PHP Tipps 2008 6 22.01.2008 20:57
Session Variablen als Referenz!? O_o Sam781 PHP-Fortgeschrittene 4 01.10.2007 11:19
Variablen von Funktionen außerhalb nutzen Wing PHP Tipps 2008 5 28.09.2007 17:05
unerklärliches Leeren von Variablen KuShi PHP Tipps 2007 2 08.07.2007 15:19
Teil einer Variablen mit einer Variablen ersetzen ? simsalabim PHP Tipps 2007 11 20.03.2007 20:36
Function und Variablen Quagga PHP Tipps 2006 2 11.08.2006 18:23
Referenz "&" auf einen Funktionsnamen? Was bed DonTermi PHP Tipps 2006 1 04.07.2006 12:43
Variable aus Variablen zusammensetzen juhuwoorps PHP Tipps 2007 1 28.11.2005 21:50
Variablen übergeben PHP Tipps 2005-2 9 30.08.2005 10:58
Variablen übergeben bzw. auslesen? PHP Tipps 2005 4 30.01.2005 03:56
[Erledigt] register globals off bei variablen Variablen... PHP Tipps 2005 4 25.01.2005 17:50
post variablen vorgaukeln PHP-Fortgeschrittene 4 11.01.2005 15:21
Variablen per adresse übergeben rocco PHP Tipps 2004 7 24.07.2004 12:03

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php referenz löschen, php referenz entfernen, referenz löschen, inhalt mit referenz löschen php, php klassen variable löschen, php referenz und original löschen, php funktion \, referenz löschen php, php löschen verweis, php array referenz löschen, c \referenz löschen\, eine post variable löschen, php break variablen gelöscht

Alle Zeitangaben in WEZ +2. Es ist jetzt 15:34 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

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.