Odkazy: dibi | API reference

Forum: [česky] [english]

dibi fórum

tiny ‘n’ smart
database layer

Nejste přihlášen(a)

#1 před rokem

theo
Člen
Registrovaný: 30. 7. 2009
Příspěvky: 24

DateTime53 nedefinuje metodu __toString()

PHP 5.3, Dibi 1.3-dev (revision 13aa8b2 released on 2010–04–06)

Narazil jsem na to, že při automatické detekci typů ve výsledcích (BTW móc pěkné :) a jejich nastavení jako výchozí hodnoty pro formulář v Nette (se kterým to možná až tak nesouvisí), se objevila chyba která tvrdí, že objekt třídy DateTime53 nelze převést na řetězec.

Díval jsem se do zdrojáku inkriminované třídy (v dibi/Nette/DateTime53.php) a následně i do dokumentace třídy DateTime, od které je DateTime53 poděděná a přišel jsem na to, že problém spočívá v tom, že ani DateTime53, ani DateTime nikde nedefinuje metodu __toString().

Mým (možná poněkud účelovým ale funkčním) řešením je prosté doplnění metody __toString(), přibližně takto:

<?php

public function __toString()
{
        return $this->format('Y-m-d H:i:s');
}

?>

Je to dobré řešení? Mohl by to někdo (David? :) opravit v distribučním dibi?

Díky


I come to see with eyes uncloaded by hate.

 

#2 před rokem

David Grudl
Administrator
Registrovaný: 8. 2. 2005
Příspěvky: 5548

Re: DateTime53 nedefinuje metodu __toString()

DateTime53 je jen fixem třídy DateTime pro PHP 5.2, funkcionalitu by rozšiřovat neměl. Tudíž přidávat nové metody vyloženě nechci. Také je otázka, do jakého formátu se vlastně má datum převádět. Vhodnější tedy bude volat ->format('Y-m-d H:i:s') namísto převodu na řetězec.

 

#3 před rokem

jardo
Člen
Registrovaný: 18. 7. 2009
Příspěvky: 22

Re: DateTime53 nedefinuje metodu __toString()

David Grudl napsal(a):

DateTime53 je jen fixem třídy DateTime pro PHP 5.2, funkcionalitu by rozšiřovat neměl. Tudíž přidávat nové metody vyloženě nechci. Také je otázka, do jakého formátu se vlastně má datum převádět. Vhodnější tedy bude volat ->format('Y-m-d H:i:s') namísto převodu na řetězec.

Ahoj David

Chcel by som sa spýtať otázku práve ohľadom DateTime53.
Ak zavolám na výsledku klasické nastavenie hodnoty vráteného stĺpca cez

<?php
        $result->setType('delivery_transportation_time', dibi::FIELD_DATETIME, 'H:i');
?>

Pri pokuse definovať navrátenú hodnotu ako konštantu, alebo vypísať klasicky cez echo:

<?php
        define('DELIVERY_TRANSPORTATION_TIME', $row->delivery_transportation_time);
        echo $row->delivery_transportation_time;
?>

Dostanem nasledovné chyby a varovania:

  • Warning: Constants may only evaluate to scalar values…
  • Catchable fatal error: Object of class DateTime53 could not be converted to string…

Ako riešiť tento problém v novších verziách DiBi ? Vážne nebude potreba definovať tú spomínanú metódu ?

(DiBi 1.3-dev 26.5.2010, PHP 5.3)

Díky

Editoval jardo (5. 7. 2010 20:51)

 

#4 před rokem

David Grudl
Administrator
Registrovaný: 8. 2. 2005
Příspěvky: 5548

Re: DateTime53 nedefinuje metodu __toString()

DateTime má metodu format pomocí které si můžeš datum převést do libovolného textového formátu a pak třeba uložit do konstanty.

 

#5 před rokem

jardo
Člen
Registrovaný: 18. 7. 2009
Příspěvky: 22

Re: DateTime53 nedefinuje metodu __toString()

David Grudl napsal(a):

DateTime má metodu format pomocí které si můžeš datum převést do libovolného textového formátu a pak třeba uložit do konstanty.

To teda ale znamená prekopanie všetkých zdrojákov, kde sa to používa … :(

 

Zápatí