Kontrola typu

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Jakub Šulák
Člen | 222
+
0
-

Chtěl bych se zeptat, zda náhodou někdo nezkoušel implementovat kontrolu typové validity.
Občas se mi stane, že se mi do nějaké proměnné dostane něco v nesprávném typu – pak hledám dlouze problémy.
Napadlo mě tedy, zda by nešlo pomocí třídy Annotations a funkcí __get() a __set(), zavést typovou kontrolu pro PHP.

Jde mi o něco takového:

<?php
/**
 * @var int i
 * @var string s
*/
class Animals extends TypedObject{
  public i;
  public s;
}

$a = new Animals;
$a->s = 1.5; // throw Exception

?>

Třída TypedObject je třída odvozená od Object, která definuje pro __set() kontrolu typu na základě anotace.
Celý princip samozřejmě nefunguje u proměnných, u kterých anotace nejsou – to by však nevadilo, nejvíc chyb v typu je mezi předáváním parametrů.

LM
Člen | 206
+
0
-

__get a __set jsou volány pouze na neexistující (nebo zapouzdřené) vlastnosti, takže na uvedeném příkladu to nelze. Ale Vrána se pokoušel o nějaký řešení http://php.vrana.cz/…ezovanim.php.