Autor Zpráva
czmarci
Profil *
Zdravím,
učím se PHP a narazil jsem na problém při statickém volání nestatické metody.
Pokusím se to trochu shrnout.
Mám:

class trida{
function funkce1()
{
...
}
function funkce2()
{
...
}
function funkce3(
$promena1,
$promena2,
$promena3)
{
$vysledek = trida::funkce1(trida::fukce2($promena1, $promena2, $promena3))
}
}
class trida2{
trida::funkce3("$a","$b","$c")
}



Samotný kód funguje, ale vyhodí mi PHP Unknown: Non-static method
trida::funkce1() should not be called statically, assuming $this from
incompatible context in ..... on line 165

Googluju celou noc ale neúspěšně. S toho co jsme našel je mi jasné, že staticky
volám nestatickou funkci ale nikde jsem nenašel řešení, jak kód upravit. Ještě
dodám, že u trida::funkce3("$a","$b","$c") jsou do $a, $b, $c vloženy
$this->data['atribut']

Můžete mě prosím někdo nakopnout správným směrem, nejde mi tak ani o opravu toho
co dělám špatně jako spíš o jednoduché vysvětlení a případně i řešení. Nechci
kód jen opravit ale zároveň se i z chyby poučit.
Bertram
Profil
Ahoj,
používej modifikátory přístupu public, protected, private, je to opravdu ku prospěchu,např. zapouzdření.

 public function getName{
   return $this->name;
 }


Uvnitř třídy se k vlastním nestatickým metodám (funkcím) přistupuje takto:
$this->metodaTridy();


ke statiským:

self::statickaMetodaTridy();


A pokud potřebuješ někde v kódu zavolat nestatickou metou nějaké třídy,
tak si vytvoříš z této třídy objekt (instanci třídy) a na něm pomocí operátoru ->
zavoláš onu metodu.

  class User
    {
      protected $firstName;

      protected $lastName;

      public function __construct($first, $last)
        {
          $this->firstName = $first;
          $this->lastName = $last;
        }
        
      public function getName()
        {
          return $this->firstName . $this->lastName;
        }        
    }
    
    // konec třídy User
    
    $objUser = new User ('Franta', 'Vopršálek');
    echo 'Vaše celé jméno je: ' . $objUser->getName(); 
meris
Profil
Ahoj,
definuj statické funkce jako public static function, volání je pak možně jako self:: , nebo jako NazevTridy:: které je malinko univerzálnější, toto volání lze použít kdekoli.
Michal666
Profil
Více pak v PHP manuálu http://www.php.net/manual/en/language.oop5.static.php.
czmarci
Profil *
Děkuji všem za odpovědi, všichni jste mi hodně pomohli a já konečně začínám chápat jak by to mělo fungovat.

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