Autor | Zpráva | ||
---|---|---|---|
cpbbt Profil * |
#1 · Zasláno: 14. 1. 2010, 23:44:35
Jde udělat, aby se parametr pro danou metodu předal buď v konstruktoru anebo v dané metodě případně obojím?
Díky. |
||
Majkl578 Profil |
#2 · Zasláno: 15. 1. 2010, 00:02:13
Konstruktor se v php zapisuje jako metoda __construct(). Její případné parametry se přidají do vytvoření instance třídy.
Příklad: class Foo { public function __construct($text) { echo $text; } } $foo = new Foo('Hello');//vypíše Hello Jinak je dobré přečíst si v manuálu sekce základy OOP a o konstruktoru. |
||
cpbbt Profil * |
Majkl578:
Já jsem měl na mysli, abych mohl buď zavolat konstruktor s parametrm anebo metodu s parametrem. Aby šlo zavolat : 1. $oo=new moje(5); echo $oo->obvod(); Anebo 2 .$oo=new moje(); echo $oo->obvod(5); Díky class moje { // BEGIN class moje // variables private $r; // constructor function __construct ($r) { // BEGIN constructor $this->r=$r; } // END constructor public function obvod($r) { // BEGIN function obvod $this->r=$r; $o=2*3.14*$this->r; return $o; } // END function obvod } // END class moje Moderátor Majkl578: Vkládej prosím kódy mezi značky [pre] a [/pre] (stačí kliknout na
![]() |
||
mckay Profil |
#4 · Zasláno: 15. 1. 2010, 05:28:57
cpbbt:
> Já jsem měl na mysli, abych mohl buď zavolat konstruktor s parametrm anebo metodu s parametrem. > Aby šlo zavolat : Co co přesně je na tom za problém? $oo=new moje(5); echo $oo->obvod(); Tohle je správný zápis. Pokud chceš, aby se vypisovalo to, co předáváš jako parametr při instanci třídy, napiš to do construktoru (__construct()). Vkládej kód do ![]() |
||
Majkl578 Profil |
#5 · Zasláno: 15. 1. 2010, 08:46:03
V tom případě je možností nepovinný parametr v konstruktoru, který při zadané hodnotě zavolá funkci na nastavení.
|
||
Nox Profil |
#6 · Zasláno: 15. 1. 2010, 09:55:24 · Upravil/a: Nox
Abych doplnil:
u funkce obecně můžeš uvést nepovinné parametry a to tak, že jim zadáš výchozí hodnotu, nemusí to být jen u metody (konstruktu), ale i u normálních funkcí public function __construct($var = NULL){ ... } to NULL je příklad, často ho používám, ale může být i "abcd" nebo 7 atd. pokud má funkce víc parametrů a některé jsou nepovinné ale ne všechny, tak první musí být (z logických důvodů) ty povinné |
||
cpbbt Profil * |
#7 · Zasláno: 15. 1. 2010, 16:13:45
Ale když ji mím tak napsanou a zavolám:
$oo=new moje(5); echo $oo->obvod(); Tak to vypíše nulu. class moje { // BEGIN class moje // variables private $r; // constructor function __construct ($r) { // BEGIN constructor $this->r=$r; } // END constructor public function obvod($r) { // BEGIN function obvod $this->r=$r; $o=2*3.14*$this->r; return $o; } // END function obvod } // END class moje |
||
Nox Profil |
#8 · Zasláno: 15. 1. 2010, 16:27:53
cpbbt:
„Ale když ji mím tak napsanou a zavolám:“ jak to souvisí s nepovinností parametru konstruktoru? „Tak to vypíše nulu.“ nechápu, v obvodu nastavuješ $this->r=$r;, ale $r tam nepředáváš...máš zapnuté error_reporting(E_ALL)? drobnosti $o=2*3.14*$this->r;return $o; => return 2*3.14*$this->r; 3.14 => M_PI |
||
Alphard Profil |
#9 · Zasláno: 15. 1. 2010, 17:34:35
Třeba nějak takhle. Ale zadáním parametru u metody getObvod() se mění proměnná $r, jestli je to žádoucí, nebo ne, záleží na konkrétní třídě.
<?php class Kruh { private $r; public function __construct($r = null) { $this->setPrumer($r); } public function setPrumer($r) { if (is_numeric($r)) { $this->r = $r; return true; } return false; } public function getObvod($r = null) { $this->setPrumer($r); return round(2*M_PI*$this->r, 2); } } $k = new Kruh(5); echo $k->getObvod(); |
||
Časová prodleva: 13 let
|
0