<?php
class MyList implements Countable, ArrayAccess
{
//class-variabelen
//- type van de elementen
//- lijst van elementen
private $listType;
private $innerList = array();
//default constructor
public function __construct($type = "string")
{
$this->listType = $type;
}
//item toevoegen als het type juist is
public function Add($item)
{
if($this->IsType($item))
$this->innerList[] = $item;
}
//collectie van items toevoegen als het een array is
public function AddRange($collection)
{
if($this->IsArray($collection))
foreach($collection as $item)
$this->Add($item);
}
//lijst leegmaken
public function Clear()
{
}
//controleren of de lijst een item bevat
public function Contains($item)
{
if($this->IsType($item))
{
foreach($this->innerList as $innerItem)
if($item == $innerItem)
return true;
return false;
}
}
//aantal elementen in de lijst tellen
{
return count($this->innerList); }
//index van een bepaald element weergeven
//-1 wordt teruggestuurd als het niet bestaat in de lijst
public function IndexOf($item)
{
if($this->IsType($item))
{
$i = 0;
foreach($this->innerList as $innerItem)
{
if($item == $innerItem)
return $i;
else
$i++;
}
return -1;
}
}
//element op een bepaalde index invoegen
public function Insert($index, $item)
{
if($this->IsValidIndex($index) && $this->IsType($item))
{
}
}
//collectie van elementen op een bepaalde index invoegen
public function InsertRange($index, $collection)
{
if($this->IsValidIndex($index) && $this->IsArray($collection))
{
foreach($collection as $item)
if($this->IsType($item))
$this->Insert($index, $item);
}
}
//de laatste index van een element geven
public function LastIndexOf($item)
{
if($this->IsType($item))
{
for($i = count($this->innerList)-1; $i >= 0; $i--) if($this->innerList[$i] == $item)
return $i;
return -1;
}
}
//een bepaald item uit de lijst verwijderen
public function Remove($item)
{
if($this->IsType($item))
$this->RemoveAt($this->IndexOf($item));
}
//een item op basis van index verwijderen
public function RemoveAt($index)
{
if($this->IsValidIndex($index))
}
//een collectie van items verwijderen
public function RemoveRange($index = 0, $count)
{
if($this->IsValidRange($index, $count))
for($i = 0; $i < $count; $i++)
$this->RemoveAt($index);
}
//de volgorde van de elementen van de lijst omdraaien
public function Reverse()
{
}
//een sublijst maken van de huidge en terugsturen
public function SubList($index, $count)
{
$returnList = new MyList($this->listType);
if($this->IsValidRange($index, $count))
$returnList->AddRange(array_slice($this->innerList, $index, $count)); return $returnList;
}
//maakt een standaard array van de elementen van de lijst
public function ToArray()
{
}
//deze functie zorgt ervoor dat je de foreach-loop
//kan gebruiken om door de elementen van de lijst te gaan
public function GetIterator()
{
return new ArrayIterator($this->innerList);
}
//vanzelfsprekend
private function IsInteger($input)
{
}
//vanzelfsprekend
private function IsArray($item)
{
}
//deze functie kijkt na of het opgegeven type gelijk
//is aan het type dat verwacht wordt voor de lijst
private function IsType($item)
{
return $this->listType == $itemType;
}
//nakijken of de opgegeven index wel valid is
private function IsValidIndex($index)
{
if(!$this->IsInteger($index))
return false;
return ($index >= 0 && $index < count($this->innerList)); }
//kijken of de range van elementen vanaf de index
//tot het aantal elementen wel 'mag'
//->dus dat die range niet buiten de lijst ligt
private function IsValidRange($index, $count)
{
if($index < 0 || $count < 1)
return false;
if($count > $this->Count())
return false;
if(($index + $count)-1 > $this->Count()-1)
return false;
return true;
}
//private functie zodat je $var = $myList[$index] kan gebruiken
private function GetItem($index)
{
if($this->IsValidIndex($index))
return $this->innerList[$index];
}
//private functie zodat je $myList[$index] = $value kan gebruiken
private function SetItem($index, $item)
{
if($this->IsValidIndex($index) && $this->IsType($item))
$this->innerList[$index] = $item;
}
//wordt niet direct gebruikt maar moet neergeschreven worden
//omdat deze klasse de interface ArrayAcces implementeert
public function offsetExists($index)
{
return $this->Contains($index);
}
//functie vanuit de interface ArrayAccess die het resultaat van GetItem() terugstuurt
//$var = myList[$index];
public function offsetGet($index)
{
return $this->GetItem($index);
}
//functie die SetItem() aanroept
//myList[$index] = $value;
public function offsetSet($index, $item)
{
$this->SetItem($index, $item);
}
//zelfde hier als met offsetExsists
public function offsetUnset($index)
{
$this->RemoveAt($index);
}
}
?>