Autor Zpráva
Ubraham
Profil *
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 *
ani třeba nemohu deklarovat uvnitr class

$page = $_GET['page'];
Nox
Profil
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
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 *
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
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
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 *
Děkuji za odpověď.

Poslední otázka, k čemu je dunkce __construct()?

Pouze pro deklaraci proměné ip?
Majkl578
Profil
[#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 *
Děkuji, děkuji.

Toť vše, přeji hezký zbytek dne.
Nox
Profil
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

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: