Autor Zpráva
Gavier
Profil
Dobrý den,

mám dotaz ohledně přiřazení super globální proměnné do atributu funkce v kodu jako tento:
class myclass{
        #atributes
        public $verbose=false;
        private $defaultIp=$_SERVER['REMOTE_ADDR'];
        function someFunc($ip=self::$defaultIp){
        ...
        }
 
prohlížeč mi hlásí:
Parse error: syntax error, unexpected '$_SERVER' (T_VARIABLE) 
je třeba ktéto ($_SERVER) proměnné přistupovat také objektově? Nebo je třeba data "procpat" do objektu nějakým jiným způsobem?
Joker
Profil
Gavier:
Problém není v $_SERVER nebo v superglobální proměnné, ale v tom, že atribut třídy lze inicializovat jen konstantou.
Takže to výše uvedené není možné.

Bylo by možné to nastavit v konstruktoru třídy, což ovšem koliduje s další věcí, a sice že když se ten atribut používá způsobem function someFunc($ip=self::$defaultIp), měl by být statický.
Dodatek: Možná nejelegantnější by bylo místo atributu mít metodu třeba getDefaultIp
Tori
Profil
Vysvětlení: http://www.php.net/manual/en/language.oop5.properties.php , první odstavec.
Můžete té vlastnosti přiřadit hodnotu v konstruktoru. Ještě lepší by bylo tu IP předat třídě zvenčí (konstruktoru nebo přes setter).
Gavier
Profil
Děkuji oběma za rady. Zkoušel jsem inicializaci skrze konstruktor a vše funguje.
        class myClass{
                public $var;
                public function __construct() { 
                        $this->var=$_SERVER['REMOTE_ADDR'];
                } 
                public function echoThis(){
                        $this->var.=":80";
                        echo $this->var;
                }
        }

Pokud bych chtěl atribut nastavit jako defaultní hodnotu při deklaraci metody, musel bych to udělat jak?
joe
Profil
Já bych to udělal nějak takto:
public function echoThis($var = NULL)
{  
    if ($var === NULL) {
        $var = $this->var;
    }

    echo $var;
}

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:

0