php.de

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

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 20.10.2006, 16:46  
Benutzer
 
Registriert seit: 08.11.2004
Beiträge: 70
shocky
shocky eine Nachricht über ICQ schicken
Standard __set() verhindern das erzeugen einer neuen Variablen

Also mit __set( $name, $value ) kann ich ja variablen einner klasse setzen die als private gekenzeichnet sind.
Das Problem ist das __set aber auch eine neue Variable erzeugt falls diese nicht vorhanden ist.
kann ich das verhindern??
Hier mein Code :

PHP-Code:

class MyClass{
   private 
$MyVar;
   
   function 
__set$name$value ){
      
$this->$name $value;
   }

}

   
$foo = new MyClass();
   
$foo->MyVar     "bla";
   
$foo->MyErrVar "blu";
   echo 
$foo->MyErrVar;
   echo 
$foo->MyVar
Jetzt will ich verhindern dass MyErrVar überhaupt erzeugt wird da man sich ja immer mal verschreiben kann und somit eine Variable erzeugt und werte dort reinschreibt die für eine andere gedacht waren und somit ist man bei der fehlersuche verloren.
shocky ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 20.10.2006, 16:50  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.987
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

kann man innerhalb der Funktion nicht $name mit einem Array gültiger Variablennamen abgleichen und bei fehlender Angabe mit false beenden??
nikosch ist offline  
Alt 20.10.2006, 16:51  
Benutzer
 
Registriert seit: 08.11.2004
Beiträge: 70
shocky
shocky eine Nachricht über ICQ schicken
Standard

hmm..
auf diese idee bin ich nicht gekommen.
Schon mal nicht schlecht obwohl einbischen unsauber wie ich finde
shocky ist offline  
Alt 20.10.2006, 17:04  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.987
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

so wie die Funktion jetzt definiert ist kann man sie aber auch gleich weglassen oder?

Code:
   function __set( $name, $value ){ 
      if (!in_array ($name , 
                     array ('MyVar' ,
                            'OtherVar'
                            ))) return false;
      $this->$name = $value; 
   }
Unsauber?
nikosch ist offline  
Alt 20.10.2006, 18:49  
Erfahrener Benutzer
 
Registriert seit: 18.07.2004
Beiträge: 2.162
PHP-Kenntnisse:
Fortgeschritten
Basti
Standard

Macht echt keinen Sinn.
Warum setzt du die Vars nicht gleich auf public?

Ich vewende __get() etc. nur in Dekoratoren oder Datenobjekten, in denen die Werte in assoziativen Arrays vorliegen.

Basti
Basti ist offline  
Alt 20.10.2006, 20:19  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.987
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

mal ne blöde frage: was sind'n Dekoratoren?
nikosch ist offline  
Alt 20.10.2006, 20:39  
Erfahrener Benutzer
 
Registriert seit: 18.07.2004
Beiträge: 2.162
PHP-Kenntnisse:
Fortgeschritten
Basti
Standard

Basti ist offline  
Alt 21.10.2006, 15:22  
Erfahrener Benutzer
 
Registriert seit: 13.11.2005
Beiträge: 2.583
xabbuh
Standard

Abgesehen davon, dass ich __set() ebenfalls für eher schlecht halte, suchst du vermutlich get_class_vars():
PHP-Code:
public function __set($name$value)
{
    if(
array_key_exists($nameget_class_vars(get_class($this))) {
        
$this->$name $value;
    }

xabbuh ist offline  
Alt 21.10.2006, 15:42  
Erfahrener Benutzer
 
Registriert seit: 18.07.2004
Beiträge: 2.162
PHP-Kenntnisse:
Fortgeschritten
Basti
Standard

...müsste array_key_exists() anstatt in_array() sein, da die Property-Namen die Schlüssel im Array sind.

Und, im Falle, dass das Attribut nicht existiert sollte eine Exception oder eben ein Fehler geworfen werfen. Andernfalls wäre das kein Spaß beim Debuggen!

Basti
Basti ist offline  
Alt 21.10.2006, 15:59  
Benutzer
 
Registriert seit: 08.11.2004
Beiträge: 70
shocky
shocky eine Nachricht über ICQ schicken
Standard

Zitat:
Warum setzt du die Vars nicht gleich auf public?
weil ich soo besser kontrolieren kann welche werte reinkommen.
Bsp. : ein Vorname darf keine zahlen enthalten!
Dies kann ich abfangen und eine Exception aufwerfen falls jemand eine zahl speichert ! :wink:
shocky 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
Smarty/quickform: Variablen Namen dynamisch erzeugen ? Toxo HTML, Usability und Barrierefreiheit 1 31.10.2007 16:55
variablen aus textfile erzeugen (shellscript) noskule Server, Hosting und Workstations 2 19.07.2006 15:42
Variablen übergeben bzw. auslesen? PHP Tipps 2005 4 30.01.2005 03:56

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php __set, __set php, php \__set\, php __set(), __set array, php variable anzeige verhindern, php __set wird nicht aufgerufen, php ändern von variablen verbieten, funktion __set php, php __set public, php setzen von variablen verhindern, php function __set, warum php __set, __set verbieten, php in einer class eine neue variable erzeugen, anzeige verhindern bei fehlender variable php, php __set() --get(), php class verhindern weitere variablen, php setzen von variablen verhindern klasse, php __get private verhindern

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