Autor | Zpráva | ||
---|---|---|---|
Ubraham Profil * |
#1 · Zasláno: 2. 11. 2009, 10:25:15
Rád bych se zeptal, z jakého důvodu nemohu uvnitř class definovat proměnou takto? Mám jí tedy deklarovat pro celý soubor? Děkuji za odpověď.
class zjistiIP { var $ip = $_SERVER["REMOTE_ADDR"]; } |
||
Ubraham Profil * |
#2 · Zasláno: 2. 11. 2009, 10:31:44
ani třeba nemohu deklarovat uvnitr class
$page = $_GET['page']; |
||
Nox Profil |
#3 · Zasláno: 2. 11. 2009, 10:43:54 · Upravil/a: Nox
var? kde si viděl v php "var"?
inicializace vlastností tříby by měla být možná, takže třeba private $ip = $_SERVER["REMOTE_ADDR"]; ale na zjištění IP myslim nepotřebuješ dělat celou třídu... function getIP(){ if( $_SERVER['HTTP_X_FORWARDED_FOR'] ) return $_SERVER['HTTP_X_FORWARDED_FOR']; if( $_SERVER['HTTP_VIA'] ) return $_SERVER['HTTP_VIA']; if( $_SERVER['REMOTE_ADDR'] ) return $_SERVER['REMOTE_ADDR']; return false; } Taky...jakým způsobem zkoušíš existenci proměnné, resp. k ní přistupuješ? |
||
nightfish Profil |
#4 · Zasláno: 2. 11. 2009, 10:55:40
Nox:
„var? kde si viděl v php "var"?“ píše se o něm v manuálu Ubraham: problém je v tom, že inicializace třídních proměnných se dá provádět pouze konstantní hodnotou (což $_SERVER['REMOTE_ADDR'] nesplňuje) |
||
Ubraham Profil * |
#5 · Zasláno: 2. 11. 2009, 11:00:04
Mám třídu na uložení dat do databáze
naplňování proměných jsem vyřešil takto $trida->datum = date("d/m/Y"); a v tride promenou deklaruji jako var $date; Je to spravne? |
||
Majkl578 Profil |
#6 · Zasláno: 2. 11. 2009, 11:18:56
Nox:
„var? kde si viděl v php "var"?“ V PHP4. Obecně nelze proměnným třídy při jejím vytváření nastavit dynamické hodnoty. K tomu slouží konstruktor __construct. Takže, správně (syntakticky i dle specifikací PHP5) by to bylo takto: class Data { private $ip; public function __construct() { $this->ip = $_SERVER['REMOTE_ADDR']; } } $data = new Data(); echo $data->ip; Toto ale není logicky úplně správně, jelikož třída není zapouzdřena - parametr může být změněn nechtěně nebo na nevalidní formát. Proto se používají gettery (Data::getIp()) a settery (Data::setIp()). Použití záleží na implementaci. [#5] Ubraham Syntakticky to správně je, ale v PHP5 se nepoužívá slovo "var". Místo něj se používají klíčová slova pro viditelnost. O nastavení hodnot jsem psal výše. |
||
nightfish Profil |
#7 · Zasláno: 2. 11. 2009, 11:20:11 · Upravil/a: nightfish
PHP 5 nejprve "var" zavrhovalo, pak jej opet začlo tolerovat
do budoucna je lepší var nahrazovat modifikátorem public ovšem přímý přístup k členském proměnné třídy porušuje princip zapouzdření a tudíž jej nelze doporučit... správným řešením je datum deklarovat jako private, a pro přístup používat metody getDatum(), případně setDatum(), které budou nastaveny jako public EDIT: pozdě ale přece |
||
Ubraham Profil * |
#8 · Zasláno: 2. 11. 2009, 11:25:11
Děkuji za odpověď.
Poslední otázka, k čemu je dunkce __construct()? Pouze pro deklaraci proměné ip? |
||
Majkl578 Profil |
#9 · Zasláno: 2. 11. 2009, 11:29:14
[#8] Ubraham
Stačí se podívat do manuálu: http://cz2.php.net/__construct __construct() je jedna z magických metod, tato konkrétně je volána při vytvoření instance objektu (a jelikož je to ve tvém případě vhodná chvíle pro inicializaci (nikoliv deklaraci) property, je to v ní) |
||
Ubraham Profil * |
#10 · Zasláno: 2. 11. 2009, 11:30:21
Děkuji, děkuji.
Toť vše, přeji hezký zbytek dne. |
||
Nox Profil |
#11 · Zasláno: 2. 11. 2009, 11:31:39
nightfish, Majkl578
díky za opravu Ubraham Funkce __construct se zavolá při vytváření objektu, např. $data = new Data(); tzn. můžeš to použít pro takovou inicializaci objektu... můžeš tomu dát i parametry, tzn. např. $data = new Data(5, "letadlo"); když máš definováno public function __construct($number, $nejaka_jina_promenna) Opakem je funkce __destruct, která se volá při odstranění objektu, třeba i při dokončení skriptu |
||
Časová prodleva: 15 let
|
0