Witaj, Gościu O nas | Kontakt | Mapa
Wortal Forum PHPEdia.pl Planeta Kubek IRC Przetestuj się!

Programowanie obiektowe dla początkujących

SPL - Standard PHP Library

PHP5 posiada standardową bibliotekę w której znajdują się predefiniowane klasy oraz interfejsy. Omówię jedynie przykładowe dwa interfejsy: Iterator oraz ArrayAccess.

Iterator Interfejs ten daje możliwość iterowania obiektem w pętli foreach podobnie jak tablicą. Posiada on 5 deklaracji metod, które w poniższym kodzie poprzedziłem komentarzem. Przykład implementacji:

class oIterator implements Iterator{
	private $data = array();
	private $current = 0;
	
	public function addValue($value){
		$this->data[] = $value;
	}
	
	public function setValues($values){
		$this->data = (array) $values;
	}
	/* ma zwracać obecny element */
	public function current(){
		return $this->data[$this->current];
	}
	/* ma inkrementować wewnętrzny licznik */
	public function next(){
		++$this->current;
	}
	/* ma zwracać obecny stan wewnętrznego licznika */
	public function key(){
		return $this->current;
	}
	/* ma zwracać true jeśli istnieje kolejny element */
	public function valid(){
		return isset($this->data[$this->current]);
	}
	/* ma ustawiać wewnętrzny licznik na początek */
	public function rewind(){
		$this->current = 0;
	}
}
$i = new oIterator();
$i->setValues(array(1, 2, 3, 4));

//obiekt ten mozna iterować w pętli foreach
foreach($i as $v){
	echo $v."\n";
}

ArrayAccess Interfejs ten pozwala na dostęp do obiektu w taki sposób jak do tablicy. Interfejs ma cztery zdeklarowane metody (poprzedziłem je w przykładzie stosownymi komentarzami). Przykład implementacji:

class oArray implements ArrayAccess{
	private $data = array();
	/* ma zwracać true jeśli podany element istnieje */
	public function offsetExists($name){
		return isset($this->data[$name]);
	}
	/* ma zwracać podany element */
	public function offsetGet($name){
		return $this->data[$name];
	}
	/* ma ustawiać wartość podanego elementu */
	public function offsetSet($name, $value){
		$this->data[$name] = $value;
	}
	/* ma usuwać podany element */
	public function offsetUnset($name){
		unset($this->data[$name]);
	}
}

$oArray = new oArray();
$oArray['name'] = 'name';//dostęp do obiektu jak do tablicy
echo $oArray['name'];
Informacje na podobny temat:
Wasze opinie
Wszystkie opinie użytkowników: (3)
Błąd w przykładowym kodzie
Wtorek 16 Luty 2010 2:33:32 pm - mateo84 <mateo84_at_o2.pl>

Witam, próbowałem się zaznajomić z projektowaniem obiektowym w php i pozytywnie odbieram fakt, że komuś chce się pisać te wszystkie poradniki i tutoriale, tak jak ten. Ale niestety mam uwagę. 3. Modyfikacja dostępu w kodzie 4 (licząc od góry) metoda getName() nie wyświetla ani Reksio ani też Jamnik Reksio. Zapewne dlatego że gdzieś wypadałoby wpisać "echo". Jeżeli jest to zależne od konfiguracji serwera to przepraszam ja, ale jeżeli autor nie przetestował działania skryptu to coś tu jest nie "helloł".
Pozdrawiam :)

Za malo o istocie OOP
Niedziela 29 Marzec 2009 7:22:56 pm - seth

Brakuje mi w tym artykule opisu filozofii pisania obiektowego. To co w nim jest to tylko opis narzedzi ktore udostepnia PHP 5, a przeciez programowanie obiektowe to cos wiecej niz uzywanie slowek class, extend itp.

Jako, ze jest to tekst dla poczatkujacych brak wprowadzenia w istote OOP jest dla mnie bardzo duzym minusem.

Jezeli juz kogos chcemy uczyc obiektowki to zadbajmy o to aby wiedzial po co mu to do szczescia i jakie problemy rozwiazuje. W przeciwnym razie osoba taka dostaje do reki mlotek z instrukcja obslugi ale nie wie po co w ogole ma wbijac te gwozdzie.

Nie dla początkujących
Piątek 27 Marzec 2009 9:36:11 pm - orglee

Panie Piotrze posługuje się Pan bardzo hermetycznym językiem, opisując podstawy obiektówki. Nie wiem czy będąc początkującym zrozumiałbym więcej niż połowę z tego artykułu. Oprócz tego czasami wyprzedza Pana, Pańskie myślenie. Przykładem może być, użycie słów opisujących proces dziedziczenia, przed wytłumaczeniem istoty tego zagadnienia.

Mentax.pl    NQ.pl- serwery z dodatkiem świętego spokoju...   
O nas | Kontakt | Mapa serwisu
Copyright (c) 2003-2017 php.pl    Wszystkie prawa zastrzeżone    Powered by eZ publish Content Management System eZ publish Content Management System