php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > PHP Developer Forum
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Fragen zu Laravel, YII oder anderen PHP-Frameworks.

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 25-11-2006, 18:06
PHP-Checker
 Newbie
Links : Onlinestatus : PHP-Checker ist offline
Registriert seit: May 2006
Beiträge: 12
PHP-Checker ist zur Zeit noch ein unbeschriebenes Blatt
Standard Problem mit __get()

Hi,

Ich bin gerade dabei eine Config Klasse in PHP5 zu schreiben. Bis jetzt kann sie .ini oder .xml Files auslesen, welche als mehrdimensionales array gespeichert werden dieses Array möchte ich gerne mit der "magischen" __get() Funktion abfragen, was aber nicht so funktioniert wie ich möchte.

PHP-Code:
// _data beinhaltet das mehrdimensionale array
 
public function __get($name)
    {
        
$result null;
        if (isset(
$this->_data[$name])) {
            
$result $this->_data[$name];
        }
        return 
$result;
    } 
Die Abfrage sieht dann so aus:
PHP-Code:
$config = new Config(Config_Ini::load('config.ini')); //die config.ini wird als array in _data gespeichert.

$config->test //das funktioniert noch, würde array("testwert" => "test") beinhalten

$config->test->testwert //sollte eigentlich string "test" sein funktioniert aber nicht... 
Die __get() funktion übergibt $name ja selbstständig, ich hab also überprüft wie $name aussieht wenn man den testwert aufrufen möchte. Aber anstatt "test->testwert" stand dort einfach nur "test" innen.

Weiß jemand wie ich das Problem lösen kann?
Mit Zitat antworten
  #2 (permalink)  
Alt 25-11-2006, 20:30
3DMax
 PHP Senior
Links : Onlinestatus : 3DMax ist offline
Registriert seit: Jan 2004
Beiträge: 1.916
3DMax ist zur Zeit noch ein unbeschriebenes Blatt
Standard Re: Problem mit __get()

Zitat:
Original geschrieben von PHP-Checker
Die __get() funktion übergibt $name ja selbstständig, ich hab also überprüft wie $name aussieht wenn man den testwert aufrufen möchte. Aber anstatt "test->testwert" stand dort einfach nur "test" innen.
schalte mal error_reporting(E_ALL) ein, dann erhälst du:
Notice: Trying to get property of non-object in ...

was bei $config->test->testwert auch logisch ist:
$config->test liefert dir einen string aus dem config-array zurück. dann folgt ein weiterer objektzugriff auf den string: $config->test->testwert und das liefert null.

Zitat:
Weiß jemand wie ich das Problem lösen kann?
du müsstest deine __get methode umschreiben, dass sie im falle eines unterarrays ein neues config-object zurückliefert (mit dem unterarray als konfiguration).
Mit Zitat antworten
  #3 (permalink)  
Alt 25-11-2006, 20:48
PHP-Checker
 Newbie
Links : Onlinestatus : PHP-Checker ist offline
Registriert seit: May 2006
Beiträge: 12
PHP-Checker ist zur Zeit noch ein unbeschriebenes Blatt
Standard

hmm das hab ich mir auch schon gedacht... ok das wird jetzt bisschen kompliziert aber ich versuchs mal :-)
Mit Zitat antworten
  #4 (permalink)  
Alt 25-11-2006, 21:13
3DMax
 PHP Senior
Links : Onlinestatus : 3DMax ist offline
Registriert seit: Jan 2004
Beiträge: 1.916
3DMax ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Original geschrieben von PHP-Checker
... ok das wird jetzt bisschen kompliziert aber ich versuchs mal :-)
aber wirklich nur ein bisschen - in etwa so:
PHP-Code:
public function __get($name)
 {
  if(!isset(
$this->_data[$name]))
   return 
null;

  if(!
is_array($this->_data[$name]))
   return 
$this->_data[$name];

  
$class_name=get_class($this);
  
$c=new $class_name();
  
$c->loadConfigByArray($this->_data[$name]));
  return 
$c;
 } 

edit: loadConfigByArray() war nur eine fiktive methode, dein konstruktor erwartet ja schon ein array, also $c=new $class_name($this->_data[$name]);

Geändert von 3DMax (25-11-2006 um 21:42 Uhr)
Mit Zitat antworten
  #5 (permalink)  
Alt 25-11-2006, 21:42
PHP-Checker
 Newbie
Links : Onlinestatus : PHP-Checker ist offline
Registriert seit: May 2006
Beiträge: 12
PHP-Checker ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Muss man zwar noch umschreiben aber ich probiers mal schnell aus...

Ok funktioniert musste es noch abändern, da das Array im Konstruktur als Parameter erwartet wird:

PHP-Code:
  public function __get($name)
 {
  if(!isset(
$this->_data[$name]))
   return 
null;

  if(!
is_array($this->_data[$name]))
   return 
$this->_data[$name];

  
$class_name=get_class($this);
  
$c=new $class_name($this->_data[$name]);
  return 
$c;
 } 
Danke :-)

Geändert von PHP-Checker (25-11-2006 um 21:52 Uhr)
Mit Zitat antworten
  #6 (permalink)  
Alt 26-11-2006, 18:41
PHP-Checker
 Newbie
Links : Onlinestatus : PHP-Checker ist offline
Registriert seit: May 2006
Beiträge: 12
PHP-Checker ist zur Zeit noch ein unbeschriebenes Blatt
Standard

So jetzt hab ich wieder ein Problem aber diesmal mit der __set($name, $value):

PHP-Code:
$config->database->dbname "test";

// __set Methode
public function __set($name$value)
{
  
print_r($name);
  echo 
"<br>";
  
print_r($value);

bei dem Code lautet die Ausgabe für $name einfach nur "dbname", $value macht keine Probleme aber ich weiß nicht wo mein ->database hin ist?

Weißt du wie ich das lösen kann?
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre 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


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

ADSMAN V3 - Werbe-Manager ansehen ADSMAN V3 - Werbe-Manager

ADSMAN V3 - mehr als nur ein Bannermanager! Banner, Textanzeigen und PagePeel Manager! Mit ADSMAN PRO haben Sie die Marketinglösung für eine effektive und effiziente Werbeschaltung mit messbaren Ergebnissen. Unterstützt werden Bannerformate in beliebi

25.10.2018 virtualsystem | Kategorie: PHP/ Bannerverwaltung
PHP News und Artikel Script V2

News schreiben, verwalten, veröffentlichen. Dies ist jetzt mit dem neuen PHP News & Artikel System von virtualsystem.de noch einfacher. Die integrierte Multi-User-Funktion und der WYSIWYG-Editor (MS-Office ähnliche Bedienung) ermöglichen...

25.10.2018 virtualsystem | Kategorie: PHP/ News
Top-Side Guestbook

Gästebuch auf Textbasis (kein MySQL nötig) mit Smilies, Ip Sperre (Zeit selbst einstellbar), Spamschutz, Captcha (Code-Eingabe), BB-Code, Hitcounter, Löschfunktion, Editierfunktion, Kommentarfunktion, Kürzung langer Wörter, Seiten- bzw. Blätterfunktion, V

22.10.2018 webmaster10 | Kategorie: PHP/ Gaestebuch
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 07:40 Uhr.