Autor Zpráva
jan99
Profil *
ahoj, davam ukazku php: Potreboval bych aby mi nekdo opravil ten kod tak aby to fungovalo. To co mi neni jasne je popsano rovnou v kodu. Diky moc

class a{
        private $var;  
        public function __construct($var){
            $this->var = $var; //ok tedka je var promena private a je dosazitelna napric tridou bez pouziti global, ale jak ji udelat zaroven statickou!?
        }
        
        public static function f(){
            $this->var //nebude fungovat kdyz budu volat funkci staticky!? co stim?
            $this->p(); //muzu v ramci staticke funkce zavolat unkci p? jak se to da udelat?
        }
        
        private function p(){
            $this->var //ok volam v ramci tridy, bude fungovat
            $this->f(); //muzu zavolat z private statickou funkci?
        }
        
}
Alphard
Profil
$this se používá při instančním volání. Při statickém lze použít self::.
Monkeys
Profil *
jan99:
staticke funkcie mozes volat 2 sposobmi.

v tvojom pripade:
a::f();
self::f();

M.
jan99
Profil *
vím kdy se používá this a self, ale jak je patrné z ukázky nevím jak udělat proměnou $var zároveň statickou a instanční když je předávána skrz konstruktor oné třídy. Respektive instanční se dá udělat v konstruktoru takto $this->var = $var; ale jak ji udělat statickou? Jde o to že potřebuju aby $var bylo viditelné v private funkci a taky ve static funkci. Je to všechno v té ukázce..
Someone
Profil
jan99:
Když je předáváná přes konstruktor, tak to znamená, že vytváříš instanci dané třídy, proč bys tedy chtěl aby byla ta vlastnost i statická?
jan99
Profil *
Someone: prostě jde v základu o to aby byla proměná $var viditelná jak pro statické, tak pro privátní funkce.. Jinak bych musel do každé statické funkce psát global $var aby to fungovalo, což mi nepřijde jako zrovana elegantní řešení


Jeste tu davam jednu samozrejme nefunkci ukazku. $varx by mela byt zaroven private static i public.

<?php
class a{
        public private static $varx; //chci aby byla statická, private i public
        public function __construct($varx){
        }
        
        public static function f(){
            return $varx;
        }
        
        public function p(){
            return $varx;
        }
        
        private function c(){
            echo $varx; //zobraz kůll
        }
        
}

$inst = new a('kůll');
echo $inst->p(); //zobraz kůll
echo a::p(); //zobraz kůll
?>

Jedine co me napada je dat $varx jako konstantu a takto bude "viditelna" neustale, ale myslim ze musi existovat i jine reseni
Alphard
Profil
//chci aby byla statická, private i public

Tohle je dokonalý oxymóron
Přej si, co chceš,
zlatý důl nebo věž,
sladkou sůl, smutný ráj,
suchý déšť
.


Nechcete nám naznačit, jaký praktický problém řešíte? Třeba najdeme problém v tom.

Nebo nerozumíte teorii? Ten váš požadavek je pochopitelně nesplnitelný.
jan99:
Přestal jste odpovídat. Já jsem svůj příspěvek nemyslel špatně, jen jsem chtěl názorně vysvětlit, že public a private jsou naprosto opačného významu a není možné chtít oboje zároveň. Buď jedno, nebo druhé. Popište, o co se snažíte, jak to chápete. Budu-li moc, rád vám pomohu.

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