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

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

PHP Newsletter Script SuperWebMailer ansehen PHP Newsletter Script SuperWebMailer

Die webbasierte PHP Newsletter Software SuperWebMailer ist die optimale Lösung zur Durchführung eines erfolgreichen E-Mail-Marketings. Zur Nutzung des PHP Script-Pakets ist eine eigene Webpräsenz/Server mit PHP 5 oder neuer, MySQL 4 oder neuer und die

29.04.2021 mirko_swm | Kategorie: PHP/ Mail
OXID eShop

Mit OXID eshop bieten wir Ihnen eine modulare und skalierbare Internet Shopping Software mit einem hervorragenden Preis-/Leistungsverhältnis.

29.04.2021 eric.jankowfsky@ | Kategorie: PHP/ Shops
PHP-Login

Die Aufgabenstellung bestand darin, ein einfaches Login-Script zu erstellen, dass schnell und universell auf jeder Webseiten eingebaut werden kann. Der Schwerpunkt lag dabei auf der Entwicklung eines universell einsetzbarem Modul für den Login und zur

05.04.2021 Wallhalla | Kategorie: PHP/ Kundenverwaltung
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 08:42 Uhr.