Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> zasięg zmiennych w funkcjach zagnieżdżonych (proste drzewko kategorii)
zephyr7
post
Post #1





Grupa: Zarejestrowani
Postów: 71
Pomógł: 1
Dołączył: 3.11.2005

Ostrzeżenie: (0%)
-----


Napisałem bardzo prostą funkcję tworzącą drzewko kategorii.
Niestety, korzysta ona z 2 zmiennych globalnych (poniżej) $n i tablicy wyników.

Czy da się te zmienne jakoś wsadzić w zagnieżdżoną funkcję, żeby uniknąć korzystania z globali?


  1. //gets and sorts by nesting
  2. function get_categories($table, $id,$level,$user_id){
  3. [b]global $n,$results_array;[/b]
  4.  
  5. $query=$this->db->query("SELECT * FROM ".$table." WHERE user_id=".$user_id." and parent_id=".$id);
  6.  
  7. foreach ($query->result_array() as $row)
  8. {
  9. $n++;
  10. //$results_array[$n][$level]=$row["name"];
  11. $results_array[$table][$n]["name"]=$row["name"];
  12. $results_array[$table][$n]["id"]=$row["id"];
  13. $results_array[$table][$n]["parent"]=$row["parent_id"];
  14. $results_array[$table][$n]["level"]=$level;
  15.  
  16. echo $row['name'];
  17. $this->get_categories($table,$row["id"],$level+1,$user_id);
  18. }
  19. return $results_array;
  20.  
  21.  
  22. }


Ten post edytował zephyr7 30.07.2011, 16:48:53
Go to the top of the page
+Quote Post
wookieb
post
Post #2





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




Proszę wstawić bbcode.
Go to the top of the page
+Quote Post
mat-bi
post
Post #3





Grupa: Zarejestrowani
Postów: 690
Pomógł: 92
Dołączył: 6.02.2011

Ostrzeżenie: (0%)
-----


Przekaż jako argumenty funkcji?
Go to the top of the page
+Quote Post
zephyr7
post
Post #4





Grupa: Zarejestrowani
Postów: 71
Pomógł: 1
Dołączył: 3.11.2005

Ostrzeżenie: (0%)
-----


no właśnie chciałem, ale nie widzi!

bo kiedy dodam w definicji funkcji $n=NULL, $result_array=NULL

i dwa dodatkowe argumenty w wywoływanej funkcji $this->....,

wartości argumentów się tracą, z jakiegoś powodu (IMG:style_emoticons/default/smile.gif)

albo może zapytam inaczej: czy użycie tych dwóch globali jest obicachowe/niebezpieczne, czy w ogóle jest sens się z tym bawić i zmieniać(IMG:style_emoticons/default/questionmark.gif) ?

Ten post edytował zephyr7 30.07.2011, 19:36:13
Go to the top of the page
+Quote Post
lobopol
post
Post #5





Grupa: Zarejestrowani
Postów: 1 729
Pomógł: 346
Dołączył: 4.04.2009

Ostrzeżenie: (0%)
-----


W tym wypadku jest obciachowe.
Go to the top of the page
+Quote Post
zephyr7
post
Post #6





Grupa: Zarejestrowani
Postów: 71
Pomógł: 1
Dołączył: 3.11.2005

Ostrzeżenie: (0%)
-----


Kiedy próbuję przekazać zmienną N jako parametr, dzieją się większe cuda:

n:1
n:2
n:2
n:3
n:4
n:3
n:4

Czemu nie idzie po kolei, 1,2,3,4 (IMG:style_emoticons/default/questionmark.gif) ?
Go to the top of the page
+Quote Post
Helid
post
Post #7





Grupa: Zarejestrowani
Postów: 280
Pomógł: 20
Dołączył: 12.12.2007
Skąd: 127.0.0.1

Ostrzeżenie: (0%)
-----


  1. public function categories($parent = 0, $categories = array(), $depth = 0)
  2. {
  3. global $categories;
  4. ++$depth;
  5. foreach(DB::select('*')->from('categories')->where('parent', '=', $parent)->execute() as $item)
  6. {
  7. $name = '';
  8. for($x = 2; $x <= $depth; $x++)
  9. {
  10. $name .= '----';
  11. }
  12. $name .= ' '.$item['name'];
  13. $categories[] = array($item['id'] => $name);
  14. $this->categories($item['id'], $categories, $depth);
  15. }
  16. return $categories;
  17. }

Osobiście robię to w ten sposób. Wydaje mi się że przynajmniej jedna zmienna musi być globalna.

Ten post edytował Helid 31.07.2011, 11:56:34
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 25.12.2025 - 00:46