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 24-11-2006, 19:54
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 OOP $this Fehler

Hi,

Kann mir vielleicht jemand sagen was ich falsch mache ich finde echt keinen Fehler... Der Code ist in PHP5 geschrieben d ich gerade an einem Framework arbeite und auf die PHP5 Features nicht verzichten möchte.

PHP-Code:
class Klasse1
{
  public function 
__construct($string)
  {
     echo 
$string;
  }
}

class 
Klasse2 extends Klasse1
{
  protected 
$string "String aus Klasse2";

  public function 
load()
  {
     return 
$this->string;
  }
}

//----------------------------------------------

new Klasse1(Klasse2::load()); 
Das sollte einfach nur der $string ausgegeben werden aber stattdessen bekommt man folgenden Fehler:

Zitat:
Fatal error: Using $this when not in object context in (file) on line (line)
Mit Zitat antworten
  #2 (permalink)  
Alt 24-11-2006, 20:18
Alrik
 Member
Links : Onlinestatus : Alrik ist offline
Registriert seit: Jan 2006
Beiträge: 304
Alrik ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Hi,

Was genau macht denn $this, und was bedeutet Klasse::Methode? Denk drüber nach und vielleicht kommst du auf den Fehler

Gruß Thomas
Mit Zitat antworten
  #3 (permalink)  
Alt 24-11-2006, 20:55
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

Also meines wissens nach bedeutet:

$this, dass die methode oder variable die damit aufgerufen wird innerhalb derjenigen Klasse steht. Und das ist bei dem Beispiel auch erfüllt.

Dann wird es wohl ein Problem mit dem Klasse::Methode geben :-) Wahrscheinlich weil ich die Methode aus einer anderen Klasse heraus aufrufe. Darf man in PHP nicht aus der Elternklasse heraus Methoden der Kindklasse aufrufen? Andersherum weiß ich das es geht mit parent::methode.

Wenn ich die Methode aber als static wähle, bedeutet das ja, dass ich nicht extra ein Objekt der Klasse erzeugen muss. Gleich mal probieren ob das mit static funktioniert.

Wunder mich gerade nur ein bisschen ich hab diese Verfahren nämlich in Zend Framework gelesen, da führt das zwar auch zu einem Fatal Error, aber ich dachte die Leute da habens drauf^^
Mit Zitat antworten
  #4 (permalink)  
Alt 24-11-2006, 21:15
Alrik
 Member
Links : Onlinestatus : Alrik ist offline
Registriert seit: Jan 2006
Beiträge: 304
Alrik ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Deine Erklärung zu $this ist nicht ganz korrekt. $this bezieht sich auf das aktuelle objekt. Da du aber statisch eine Methode der zweiten Klasse aufrufst, zeigt $this auf kein konkretes Objekt und verweist damit ins Nirvana.
Mit Zitat antworten
  #5 (permalink)  
Alt 24-11-2006, 21:40
kuddeldaddeldu
 Registrierter Benutzer
Links : Onlinestatus : kuddeldaddeldu ist offline
Registriert seit: Sep 2006
Beiträge: 437
kuddeldaddeldu ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Hi,

Du musst ein Objekt der Klasse Klasse2 instanziieren und kannst dann die Methode load() dieser Instanz verwenden. Die Fehlermeldung sagts doch eigentlich ganz deutlich.

LG
Mit Zitat antworten
  #6 (permalink)  
Alt 25-11-2006, 12:45
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

Ok, so hatte ichs vorher auch gemacht gehabt war nur ein bisschen iritiert da es beim Zend Framework bei der Klasse Config so gemacht wurde wie ich es oben probiert habe...

Danke, jetzt weiß ich zumindest genau wo der Fehler liegt :-)
Mit Zitat antworten
  #7 (permalink)  
Alt 25-11-2006, 20:47
ghostgambler
 Master
Links : Onlinestatus : ghostgambler ist offline
Registriert seit: Jul 2004
Ort: DE - NRW
Beiträge: 4.620
ghostgambler ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Original geschrieben von PHP-Checker
Ok, so hatte ichs vorher auch gemacht gehabt war nur ein bisschen iritiert da es beim Zend Framework bei der Klasse Config so gemacht wurde wie ich es oben probiert habe...
eh ... ich hab zwar schon lange kein Auge mehr auf das Framework geworfen, aber zumindest zu Anfang konnten die Leute vor allem das eine: Validen PHP-Code produzieren, deshalb hat ja auch nur eine beschränkte Anzahl User Schreibzugriff auf's SVN
Das die in einer statischen Methode mit $this rumhantieren, wage ich wirklich zu bezweifeln
Mit Zitat antworten
  #8 (permalink)  
Alt 25-11-2006, 21:18
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

http://framework.zend.com

Lad dir einfach die Download Version runter und schau dir die Config.php und die Config/Ini.php an ich hab in den beiden Dateien schon einige Fehler entdeckt....

Ini.php

Es wird ein Ini File eingelesen und im IniArray abgelegt. So danach überprüfen sie ob eine Sektion im Array doppelt vorkommt. Ziemlich sinnlos da falls eine Sektion im Ini File doppelt vorkommt die parse_ini_file Funktion den vorherigen wert überschreibt so dass die Sektion nur einmal im Array steht.

Laut der Dokumention wird ein Ini File so geladen:
PHP-Code:
$config = new Zend_Config(Zend_Config_Ini::load('config.ini')); 
Nur blöd das die Funktion load() überhaupt nicht existiert da diese fälschlicherweise als __construct() definiert wurde. Selbst wenn man das ganze in load umbenennt geht es nicht da eben wie oben erläutert ziemlich viele $this vorkommen und diese Methode ist auch nicht als static ausgezeichnet.

Kannst dich ja selbst überzeugen...

Geändert von PHP-Checker (25-11-2006 um 21:30 Uhr)
Mit Zitat antworten
  #9 (permalink)  
Alt 26-11-2006, 13:07
ghostgambler
 Master
Links : Onlinestatus : ghostgambler ist offline
Registriert seit: Jul 2004
Ort: DE - NRW
Beiträge: 4.620
ghostgambler ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Original geschrieben von PHP-Checker
Laut der Dokumention wird ein Ini File so geladen:
PHP-Code:
$config = new Zend_Config(Zend_Config_Ini::load('config.ini')); 
Regel Nummer 1:
Eine Doku ist NIE so aktuell wie der Quellcode ^^

Ich überfliege gerade nur, aber ich schätze die haben einfach die Anwendungsweise geändert (es ist ja schlichtweg noch eine Alpha-Preview) und das wurde noch nicht in der Dokumentation geändert

Wenn ich mir die Vererbung so anschaue, würde ich auf eine Verwendung wie
PHP-Code:
$config = new Zend_Config_Ini('config.ini'); 
tippen, da Zend_Config_Ini von Zend_Config erbt
Mit Zitat antworten
  #10 (permalink)  
Alt 26-11-2006, 18:37
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

Ja die werden da noch einiges ändern, ich schreib mir nur gerade selbst mein erstes Framework und ich hab halt ein Beispiel gebraucht um zu sehen wie das aufgebaut wird :-)
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:18 Uhr.