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..