[php] Odwoływanie się w klasie do metody z innej klasy

0

Mam problem z odwoływaniem się z jednej klasy do metody w drugiej klasie.

Mam dwie klasy:

class.elementy.php

class elementy
{

public function tekst()
{
$text = 'jakis tam przydlugawy tekst';
$funkcje->utnij($text,30); // 30 = ile znakow uciac
return $text;
}

}

i drugą klase

class.funkcje.php

class funkcje
{

public function utnij($text,$ile_znakow)
{
// tutaj zawartosc funkcji
return $text;
}

}

Obie klasy ładuje w pliku index.php i następnie dołączam do niego pliku "widoku" w którym odwołuje się do poszczególnych klas np. echo $elementy->tekst(). Niestety otrzymuję błąd przy próbie wywołania metody z klasy funkcje w klasie elementy. W jaki sposób można się do nich odwoływać?

Treść błędu:

Fatal error: Call to a member function utnij() on a non-object in (...)

0

$funkcje to jakaś zmienna (niezainicjowana), nie klasa, nie instancja klasy. Możesz to zrobić albo tak:

$funkcje = new Funkcje;
$funkcje->utnij();

albo, jeżeli nie potrzebujesz konstruktora w klasie Funkcje to zrobić tam same metody statyczne:

class Funkcje
{
    public static function utnij() { cośtam; }
}

i używać czegoś takiego:

Funkcje::utnij();
0

Eureka! Ktos, dzięki wielkie! Faktycznie statycznie działa bez problemów!

A czy inicjowanie

$funkcje = new Funkcje;

Trzeba wykonywać w każdej metodzie osobno?

0

Inicjowania używa się tylko raz do "wrzucenia" obiektu w jakąś zmienną. Czyli:

$kobieta = new Kobieta;
$kobieta -> randomize();
$kobieta -> doGarow();
//I tak dalej, potem nastepna klasa:
$facet = new Man;
$kobieta -> spij();
$facet -> spij();

Po zainicjowaniu możesz sobie robić z klasą co chcesz i kiedy chcesz.

0

Nie to żebym się sprzeczał, ale jak zainicjuje obiekt do zmiennej w jednej metodzie to nie mogę go użyć już w drugiej i ciągle się głowie co robię źle ten problem też pojawia mi się w tym http://4programmers.net/Forum/viewtopic.php?id=147936 wątku

0

w konstruktorze:
$this->funkcje = new Funkcje;
w każdej nie-statycznej metodzie naszej-klasy (lolz), w ktorej trzeba uzyc obiektu klasy funkcje:
$this->funkcje->jakas_metoda_tez_niestatyczna();

1 użytkowników online, w tym zalogowanych: 0, gości: 1