OOP (funkcja nie przekazuje zmiennej)


(userrpl) #1

Witam mój problem to zmienna

$file

która nie chcę się przekazać do funkcji

fopen()

A o to kod funkcji:

public function set($add,$tab) {


  if (strpos($tab, 'Edukacja')) {

	  $file ='a.txt';

	   }

	elseif (strpos($tab, 'Rozrywka')) {

	  $file ='b.txt';

	   }

	elseif (strpos($tab, 'Software')) {

	  $file ='c.txt';

	   }



	$record_format = $add. "\n";

	$open = fopen("$file", 'a');

	  fwrite($open, $record_format);

	  fclose($open);

	  }

zmienna

$tab

to tablica która otrzymuję przekazaną wartość z pola " checkbox"

Dlaczego tak jest, czy muszę zadeklarować zmienną składową a następnie wewnątrz funkcji, odwoływać się do niej za pomocą pseudo zmiennej " $this"


(P) #2

Zmienna file jest stringiem, więc to powinno wystarczyć:

$open = fopen($file, 'a');

Tylko, że nawet tak jak to zapisałeś i tak powinno działać. Zrób coś takiego:

if ($open = fopen("$file", 'a')) {

    if (fwrite($open, $add)) {echo 'zapisane';}

    else {echo 'błąd';}

    fclose($open);

}

else {echo 'nie można otworzyć pliku';}

I zobacz czy pojawi się 'zapisane'.


(meciarz) #3

Ja bym szukał problemu z funkcją strpos, ponieważ piszesz że zmienna tab to tablica, a wg manuala php:

int strpos ( string $haystack , mixed $needle [, int $offset = 0] )

sprawdź

if (isset($file)) var_dump($file);

else echo "PUSTO!!";

zaraz po tych ifach - podejrzewam że ta zmienna w ogóle nie jest ustawiona.


(userrpl) #4

Początkowo wartość ma pustą i tak ma być.

Ciekawe zmieniłem funkcje znajdowania pozycji ciągów, na znajdowanie ciągów i działa :shock: Nie rozumiem do końca dlaczego tak jest?. Przecież obie funkcje mają prawie taki sam prototyp :frowning: int strpos (string stog, string igła, int[offset]); string strstr (string stog, string igła,); Zależało mi na zastosowaniu funkcji strpos (), podobno działa ona szybciej niż strstr () kod funkcji po poprawkach:

public function set($add,$tab) {

    if (strstr($tab, 'Edukacja')) {

	  $file ='a.txt';

	   }

	elseif (strstr($tab, 'Rozrywka')) {

	  $file ='b.txt';

	   }

	elseif (strstr($tab, 'Software')) {

	  $file ='c.txt';

	   }


  if (file_exists($file)) {   

	$record_format = $add. "\n";

	$open = fopen($file, 'a');

	  fwrite($open, $record_format);

	  fclose($open);

	  }

   else {echo 'file not exists!';}

	  }