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
freelancermap.de - IT Projektvermittlung für Selbständige und Freiberufler
  #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

Projektmanagement Damals und Heute
Projektmanagement Damals und HeuteWerfen Sie einen Blick auf das, was sich verändert hat, und entdecken Sie, wo die Zukunft dieses Gebietes hinsteuert.

18.01.2021 | Berni

Arbeitsmanagement-Tools
Arbeitsmanagement-ToolsWarum jedes Team Arbeitsmanagement-Tools benötigt. Man schätzt, dass 25% eines durchschnittlichen Mitarbeiter-Tages durch ineffiziente Arbeit vergeudet werden.

11.12.2020 | Berni


 

Aktuelle PHP Scripte

ebiz-trader 6.0 - Das professionelle PHP Marktplatz Script ansehen ebiz-trader 6.0 - Das professionelle PHP Marktplatz Script

Mit unserer Lösungen können Sie nahezu jeden B2B / B2C Marktplatz betreiben den Sie sich vorstellen können. Ganz egal ob Sie einen Automarktplatz, Immobilenportal oder einfach einen Anzeigenmarkt betreiben möchten. Mit ebiz-trader können Sie Ihre Anforder

21.10.2020 Berni | Kategorie: PHP/ Anzeigenmarkt
Sendeplan Script inkl. Wunsch- und Grußbox + Kick-System + Bewerbungssystem

Das professionelle Sendeplan PHP Script inkl. Wunsch- und Grußbox + Kick-System für dein Webradio. Der übersichtliche Sendeplan bietet deinen Moderatoren und Zuhörern die perfekte Übersicht der aktuellen Shows! Du kannst nicht nur Sendungen eintragen, s

20.10.2020 drcomputer | Kategorie: PHP/ Web Radio
Newsmanager 2

Der Newsmanager 2 ist sehr Vielfältig und kann News schreiben, Newsletter versenden und RSS Feeds in einem erzeugen.

20.10.2020 Stephan_1972 | Kategorie: PHP/ News
 Alle PHP Scripte anzeigen

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