SELFPHP: Version 5.8.2 Befehlsreferenz - Tutorial – Kochbuch – Forum für PHP Einsteiger und professionelle Entwickler

SELFPHP


Professional CronJob-Service

Suche



CronJob-Service    
bei SELFPHP mit ...



 + minütlichen Aufrufen
 + eigenem Crontab Eintrag
 + unbegrenzten CronJobs
 + Statistiken
 + Beispielaufrufen
 + Control-Bereich

Führen Sie mit den CronJobs von SELFPHP zeitgesteuert Programme auf Ihrem Server aus. Weitere Infos



:: Buchempfehlung ::

TYPO3 Kochbuch

TYPO3 Kochbuch zur Buchempfehlung
 

:: Anbieterverzeichnis ::

Globale Branchen

Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP  

 

:: Newsletter ::

Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!

Vorname: 
Name:
E-Mail:
 
 

Zurück   PHP Forum > SELFPHP > PHP für Fortgeschrittene und Experten

PHP für Fortgeschrittene und Experten Fortgeschrittene und Experten können hier über ihre Probleme und Bedenken talken

Antwort
 
Themen-Optionen Ansicht
  #1  
Alt 09.08.2009, 14:19:39
GrayFox GrayFox ist offline
Anfänger
 
Registriert seit: Aug 2009
Alter: 39
Beiträge: 11
[PHP5 /OOP] Auf Eigenschaften der Vaterklasse zugreifen?

Guten Tag :-)

Ich habe ein kleines(?) Problem mit der OOP in PHP. Es gibt eine listbox.php und eine test2.php.

Die listbox.php hat aktuell folgenden Inhalt:

PHP-Code:
class listbox
{
    public 
$items;
    public 
$items_collection// = array();
    
    
function __construct()
    {
        
$this->items = new list_item_f;
        
$this->items_collection = array();
    }
    
    public function 
items($index)
    {
        return 
$this->items_collection[$index];
    }
    
    function 
addItemInternal($value)
    {
        
        
$this->items_collection[] = new list_item;    
        
$index count($this->items_collection) - 1;
        echo 
$index."<br>";
        
$this->items_collection[$index]->value $value;
    }
}

class 
list_item extends listbox
{
    public 
$value;
    
    
//JS Events
    
public $events = array();
    
    
//CSS Property
    
public $css = array();
    
    function 
__construct()
    {

    }
    
    private function 
add_css($prop$value$browser 0)
    {
        
$this->ccs[$prob][$browser] = $value;
    }
    
    public function 
add_event($event$value$browser 0)
    {
        
//echo $browser;
        
$this->events[$event][$browser] = $value;
    }
    
}

class 
list_item_f extends listbox
{

    function 
__construct()
    {

    }
    
    public function 
add($value)
    {
        
parent::addItemInternal($value);
    }
    
    public function 
addEvent($key$event$value$browser "both")
    {
        
$this->key($key)->events[$event][$browser] = $value;
    }} 
Die test2.php hat aktuell folgenden Inhalt:

PHP-Code:
include('listbox.php');

$list = new listbox;
$list->items->add("1.Item");
$list->items->add("2.Item");
$list->items->add("3.Item");
echo 
"<br>";
$list->addItemInternal("Item.1");
$list->addItemInternal("Item.2");
$list->addItemInternal("Item.3");
echo 
$list->items(0)->value."<br>";
echo 
$list->items(1)->value."<br>";
echo 
$list->items(2)->value."<br>"
Wenn ich test2.php aufrufe, erscheint folgende Ausgabe:

Code:
0
1
2

0
1
2
Item.1
Item.2
Item.3
Wie man sieht wird über parent::addItemInternal($value); die Methode "addItemInternal" der Vaterklasse aufgerufen, aber erst, wenn ich $list->addItemInternal(VALUE) direkt aufrufe, wird die Eigenschaft 'items_collection' erweitert.

Hat jemand eine Idee wo mein Fehler liegt?

--------------------------------------------------
Der Sinn des Ganzen ist, dass ich in PHP einige Steuerlemente, die in der Entwicklung von Desktopanwendungen genutzt werden, nachbauen und als vorgefertigte Klassen zur Verfügung stellen möchte. DataGrid, ListView, ListBox und TreeView seien mal als Beispiel genannt.
Dies soll die Entwicklung von Rich Internet Applications unterstützen. Der Syntax soll dabei an den von .NET angelehnt sein.

Ein Beispiel sähe so aus:
PHP-Code:
$list->items->add("1.Item");

echo 
$list->items(0)->value

$list->items->remove(0);

//ect.. 
Mit Zitat antworten
  #2  
Alt 09.08.2009, 23:06:08
Benutzerbild von xabbuh
xabbuh xabbuh ist offline
SELFPHP Guru
 
Registriert seit: May 2003
Beiträge: 7.187
AW: [PHP5 /OOP] Auf Eigenschaften der Vaterklasse zugreifen?

Hallo,

Zitat:
Zitat von GrayFox Beitrag anzeigen
Wie man sieht wird über parent::addItemInternal($value); die Methode "addItemInternal" der Vaterklasse aufgerufen, aber erst, wenn ich $list->addItemInternal(VALUE) direkt aufrufe, wird die Eigenschaft 'items_collection' erweitert.
woran machst du das fest?
Mit Zitat antworten
  #3  
Alt 09.08.2009, 23:17:58
GrayFox GrayFox ist offline
Anfänger
 
Registriert seit: Aug 2009
Alter: 39
Beiträge: 11
AW: [PHP5 /OOP] Auf Eigenschaften der Vaterklasse zugreifen?

Hallo,

zu deiner Frage - Hier dran:
PHP-Code:
include('listbox.php');

$list = new listbox;
$list->items->add("1.Item");
$list->items->add("2.Item");
$list->items->add("3.Item");
echo 
"<br>";
$list->addItemInternal("Item.1");
$list->addItemInternal("Item.2");
$list->addItemInternal("Item.3");
echo 
$list->items(0)->value."<br>";
echo 
$list->items(1)->value."<br>";
echo 
$list->items(2)->value."<br>"
das erzeugt folgende Ausgabe:
Code:
0
1
2

0
1
2
Item.1
Item.2
Item.3
items-add verweist mit parent:: auf addItemInternal. Somit müssten die ersten drei Elemente, die ausgebenen werrden 1.Item, 2.Item und 3. Item sein.

NACHTRAG:

Wenn ich folgendes ausführe:
PHP-Code:
$list->items->add("1.Item");
$list->items->add("2.Item");
$list->items->add("3.Item"); 
Dann kann ich item_collection nur, wie folgt, abfragen:
PHP-Code:
foreach($list->items->items_collection as $item)
{
        echo 
$item->value."<br>";


Aber ich ging davon aus, dass bei diesem Konstrukt:

PHP-Code:
class list_item_f extends listbox
{

        function 
__construct()
        {

        }
        
        public function 
add($value)
        {
                
parent::addItemInternal($value);
        } 
jeder Wert, der über listbox::items->add($VALUE) an listbox::addItemInternal($VALUE) weitergereicht wird und dadurch nur auf die items_collection der Vaterklasse(listbox) zugegriffen wird und somit eigentlich folgendes möglich sei:

PHP-Code:
foreach($list->items_collection as $item)
{
        echo 
$item->value."<br>";

Mit Zitat antworten
  #4  
Alt 10.08.2009, 11:08:57
Benutzerbild von xabbuh
xabbuh xabbuh ist offline
SELFPHP Guru
 
Registriert seit: May 2003
Beiträge: 7.187
AW: [PHP5 /OOP] Auf Eigenschaften der Vaterklasse zugreifen?

Die hinzugefügten Objekte der ersten drei Anweisungen liegen in der Eigenschaft $items_collection des Objektes $list->items. Die der letzten drei Anweisungen dagegen in dem Objekt $list selbst.
Mit Zitat antworten
  #5  
Alt 10.08.2009, 11:16:05
GrayFox GrayFox ist offline
Anfänger
 
Registriert seit: Aug 2009
Alter: 39
Beiträge: 11
AW: [PHP5 /OOP] Auf Eigenschaften der Vaterklasse zugreifen?

Das habe ich gestern abend auch festgestellt. Sehr komisch. Ich habe wohl die Bedeutung von "extends" falsch verstanden. Ich habe meine Klasse(n) etwas umgeschrieben.

Dabei kam folgendes heraus.

Über folgenden Aufruf:
PHP-Code:
$this->itemsCollection[$index] = new listItem
wird dem aktuellen Arrayfeld ein neue Instanz der Klasse listItem zugewiesen.

Das klappt so weit auch. Nun die Frage - Wie kann greife ich auf eine Eigenschaft, des darüberliegenden Objektes zu?

Beispiel:

PHP-Code:
class listbox

          
public a;

          function 
__construct
          
{
                
$this->"1";
          }
.....

class 
listItem
{

          function 
test
          
{
                echo ??->
a;
          }


Grüße
Mit Zitat antworten
  #6  
Alt 10.08.2009, 11:17:07
Benutzerbild von xabbuh
xabbuh xabbuh ist offline
SELFPHP Guru
 
Registriert seit: May 2003
Beiträge: 7.187
AW: [PHP5 /OOP] Auf Eigenschaften der Vaterklasse zugreifen?

Wenn du die Eigenschaft nicht in deiner Kindklasse überlagerst, geht das weiterhin über $this->a.
Mit Zitat antworten
  #7  
Alt 10.08.2009, 11:27:52
GrayFox GrayFox ist offline
Anfänger
 
Registriert seit: Aug 2009
Alter: 39
Beiträge: 11
AW: [PHP5 /OOP] Auf Eigenschaften der Vaterklasse zugreifen?

Zitat:
Zitat von xabbuh Beitrag anzeigen
Wenn du die Eigenschaft nicht in deiner Kindklasse überlagerst, geht das weiterhin über $this->a.
PHP-Code:
<?php
error_reporting
(E_ALL);
class 
listbox
{
        public 
$a;
        public 
$b;
        
        function 
__construct()
        {
            
$this->"1";
            
$this->= new ListItem;
            
$this->b->test();
        }
//.....
}

class 
listItem
{

        function 
test()
        {
            echo 
$this->a;
        }
}  

$list = new listbox;

?>
Das erzeugt bei der Ausführungen folgenden Fehler:

PHP-Code:
NoticeUndefined propertylistItem::$a in 
listItem stellt keine Erweiterung der Klasse 'listbox' mittels 'extends' dar.
Mit Zitat antworten
  #8  
Alt 10.08.2009, 13:07:43
Benutzerbild von asipak4you
asipak4you asipak4you ist offline
Anfänger
 
Registriert seit: Jul 2006
Beiträge: 29
AW: [PHP5 /OOP] Auf Eigenschaften der Vaterklasse zugreifen?

$a ist in der Klasse listItem nicht definiert!

Du könntest $a als Parameter an die Klasse listItem übergeben.

Worauf willst du überhaupt hinaus (sorry, habs nur überflogen)?
__________________
HalloPHP
Mit Zitat antworten
  #9  
Alt 10.08.2009, 13:44:56
GrayFox GrayFox ist offline
Anfänger
 
Registriert seit: Aug 2009
Alter: 39
Beiträge: 11
AW: [PHP5 /OOP] Auf Eigenschaften der Vaterklasse zugreifen?

Erstmal danke für deine Antwort :)

PHP-Code:
$a ist in der Klasse listItem nicht definiert
Ich weiß :) Ich dachte nur, dass es vielleicht einen Operator gibt für das nachfolgende Anliegen.

Zitat:
Worauf willst du überhaupt hinaus (sorry, habs nur überflogen)?
Prinzip ist folgendes - Ich habe in der Vaterklasse ein Array mit Items. Jedes Arrayfeld beinhaltet ein Objekt der Klasse 'listItem'. Jetzt würde ich gerne mit dieser Klasse auf die Eigenschaften der 'darüberliegenden' Klasse zurreifen.

PS: Ich habe mal dein Beispiel, welches wohl wieder rausgelöscht wurde, ausprobiert und erhielt dann folgenden Fehler:

PHP-Code:
Fatal errorUsing $this when not in object context in /usr/export/www/vhosts/funnetwork/hosting/aldbt/window_forms/test4.php on line 16

        
public static function getA() {
            return 
$this->a//Zeile 16
        

Ohne 'public static' erhalte ich folgende Meldung:

PHP-Code:
NoticeUndefined propertylistItem::$a in /usr/export/www/vhosts/funnetwork/hosting/aldbt/window_forms/test4.php on line 16 
Aktueller Code:

PHP-Code:
<?php
error_reporting
(E_ALL);
class 
listbox
{
        public 
$a;
        public 
$b;
        
        function 
__construct()
        {
            
$this->"1";
            
$this->= new ListItem;
            
$this->b->test();
        }

        function 
getA() {
            return 
$this->a;
        }
//.....
}

class 
listItem
{

        function 
test()
        {
            echo 
listbox::getA();
        }
}  

$list = new listbox;  

?>
Mit Zitat antworten
  #10  
Alt 10.08.2009, 13:54:19
DokuLeseHemmung DokuLeseHemmung ist offline
SELFPHP Experte
 
Registriert seit: Jun 2008
Alter: 15
Beiträge: 2.269
AW: [PHP5 /OOP] Auf Eigenschaften der Vaterklasse zugreifen?

Ich habe das jetzt schon ein Weilchen verfolgt...
Zuerst nur Bahnhof verstanden!

Und jetzt weiß ich, dass du noch grundsätzliche Probleme mit dem OOP Verständnis hast.

Leitsatz 1: (verstehen und merken)
Du kannst nur Methoden oder Eigenschaften eines Objektes nutzen, wenn du diese VORHER in dieser Klasse oder einer Vater Klasse definiert hast.

Leitsatz 2:
Bei statischn Methoden Aufrufen gibts kein $this!
Woher auch, es gibt ja auch kein Objekt.
Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen
Ansicht

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 aus.
[IMG] Code ist aus.
HTML-Code ist aus.

Gehe zu


Alle Zeitangaben in WEZ +2. Es ist jetzt 16:45:58 Uhr.


Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.


© 2001-2024 E-Mail SELFPHP OHG, info@selfphp.deImpressumKontakt