Autor Zpráva
Tori
Profil
Pěkné odpoledne,
nevíte prosím, jestli v php existuje něco podobného, jako jsou v Javě generické třídy, vytvořené jako šablony? Čtu teď zajímavou knihu o OOP, kde jsou příklady v Javě, a k tomuto jsem nevygooglila php ekvivalent (ostatně, nevím ani pod čím hledat - "template class php" najde akorát šablonovací systémy).

Zkrácený příklad z knihy:
public class Stack<X> {
  
  private List<X> list;
  
  public Stack<X>() {
    list = new LinkedList<X>();
  }
  
  public void push(X anX) {
    list.addElement(anX);
  }
}

Stack<Plate> s = new Stack<Plate>();
s.push(new Plate("White"));
Plate p = s.pop();

Díky za radu
DoubleThink
Profil *
Ne.
Nox
Profil
Myslim, že by to šlo dost jednoduše vytvořit, udělala bys obecnou třídu, kde by jsi akorát předala, co má uchovávat
Pak by se akorát kontroloval typ manuálně
Lamicz
Profil
IMHO by se za to dalo do jisté míry považovat SPL
vrtakcz
Profil
Standardně ne... Ale nic ti nebrání udělat si něco "podobného".

<?php

abstract class Stack
{
	private $type;
	private $list;
	
	public function __construct($type)
	{
		$this->type = $type;
		$this->list = new LinkedList();
	}
	
	public function push($anX)
	{
		if (!($anX instanceof $this->type)) {
			throw new \InvalidArgumentException("anX must be instance of {$this->type}");
		}
		
		$this->list->addElement($anX);
	}
}

$s = new Stack('Plate');
$s->push(new Plate("White"));
$p = $s->pop();
__construct
Profil
vrtakcz:
Od ktorej verzie PHP je možné vytvárať inštancie abstraktných tried ?
Tento kus zdrojáku pravdepodobne skončí fatal errorom …
Tori
Profil
Nox:
Aha takhle.. Věděla jsem, že by to šlo udělat jako v tomto příkladu, ale v Javě se mi líbil právě ten šablonový zápis.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0