otypovanie argumentov v hlavicke metody/funkcie
- whitedeath
- Člen | 25
Nette Framework 2.0.1 (revision 94abcaa released on 2012–02–29)
PHP 5.3.9
Netbeans IDE 7.1
Nazdar,
neviem, ci tato otazka vobec patri do Nette fora, alebo do nejakeho vseobecnejsieho, ale zaujima ma, ci je mozne nejakym sposobom force-nut, aby som to tela funckie musel zadavat ako argument presne nejaky typ, konkretnejsie:
<?php
abstract function foo(array $pole, string $retazec, integer $cislo, char $znak); // atd, atd...
?>
viem ze array funguje… zaujima ma ci toto Nette nejako riesi, alebo si tieto veci musim osetrit dodatocne v tele metody/funkcie napriklad pomocou is_numeric() atd.
zvykol som to ajriesit takto:
<?php
abstract function foo($pole = array(), $retazec = "", $cislo = 0); // atd, atd...
?>
alebo potom vovnutri, ale pohodlnejsie by to bolo, keby sa to dalo osetrit uz pri deklaracii nie?
Dakujem!
- Ascaria
- Člen | 187
Toto není na úrovni Nette, ale PHP, vynutit si typ můžeš u array a libovolného objektu, ale u základních typů ne a vývojaři PHP to prý nebudou měnit.
Pokud chceš v metodě string, lze jen
<?php
public function a($a)
{
if(!is_string($a))
throw new \Nette\InvalidStateException('String expected');
}
?>
Pokud nechceš psát do každé metody to samé, musiš to číslo předávat jako object
<?php
class Integer extends \Nette\Object
{
private $int;
public function __construct($int)
{
$this->setValue($int);
}
public function setValue($int)
{
if(!is_int($int))
throw new \Nette\InvalidStateException('Integer expected');
$this->int = $int;
}
public function getValue()
{
return $this->int;
}
/** __toString kvůli tomu, abys mohl používat $x = $Int + 1 a ne jen $x = $Int->value + 1; číslo se přetypuje na string a pak díky sčítání zpět na int */
public function __toString()
{
return (string)$this->int;
}
}
public function NejakaMetodaSCislem(Integer $int)
{
return $int->value + 1;
}
?>
Přemýšlel jsem, že začnu používat podobné třídy pro striktní dodržování typů, ale pak jsem od toho upustil, protože kromě toho že to vypadá moc blbě, tak je to moc blbý.
Editoval Ascaria (21. 3. 2012 20:12)
- whitedeath
- Člen | 25
Nuz taku nejaku triedu som si predstavoval, kedze inac sa to neda, ale myslim, ze to budem kontrolovat vnutri v metode a dovidenia, lebo takto by to nebolo tak celkom normalne ;)
Vdaka!
- Jan Tvrdík
- Nette guru | 2595
whitedeath wrote: neviem, ci tato otazka vobec patri do Nette fora, alebo do nejakeho vseobecnejsieho
To já vím! Sem to nepatří. Zamykám a vyhazuji.