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, 17: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, 19: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, 19: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, 20: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 20:42 Uhr)
Mit Zitat antworten
  #5 (permalink)  
Alt 25-11-2006, 20: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 20:52 Uhr)
Mit Zitat antworten
  #6 (permalink)  
Alt 26-11-2006, 17: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

PHP Server Monitor

PHP Server Monitor ist ein Skript, das prüft, ob Ihre Websites und Server betriebsbereit sind.

11.09.2018 Berni | Kategorie: PHP/ Security
PHP WEB STATISTIK ansehen PHP WEB STATISTIK

Die PHP Web Statistik bietet Ihnen ein einfach zu konfigurierendes Script zur Aufzeichnung und grafischen und textuellen Auswertung der Besuchern Ihrer Webseite. Folgende zeitlichen Module sind verfügbar: Jahr, Monat, Tag, Wochentag, Stunde Folgende son

28.08.2018 phpwebstat | Kategorie: PHP/ Counter
Affilinator - Affilinet XML Produktlisten Skript

Die Affilinator Affilinet XML Edition ist ein vollautomatisches Skript zum einlesen und darstellen der Affili.net (Partnerprogramm Netzwerk) Produktlisten und Produktdaten. Im Grunde gibt der Webmaster seine Affilinet PartnerID ein und hat dann unmittelb

27.08.2018 freefrank@ | Kategorie: PHP/ Partnerprogramme
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 17:56 Uhr.