Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Łączenie argumentów funkcji
Levabul
post
Post #1





Grupa: Zarejestrowani
Postów: 197
Pomógł: 0
Dołączył: 11.07.2005

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


stworzyłem klase pack w której znajduje się metoda pack() i unpack(). Niestety niemoge sobie poradzić z prtzekazywaniem nieograniczonej ilości argumentów do funkcji pack. Przedstawiam sposób jak chciałem tego dokonać :
  1. <?php
  2.  
  3. class Pack {
  4.  
  5. public $pack;
  6.  
  7.  
  8. public function __construct($str = false) {
  9. if($str) {
  10. $this -> pack = $str;
  11. }
  12. }
  13.  
  14. public function pack() {
  15. foreach (func_get_args() as $arg) {
  16. $str .= $arg.", ";
  17. }
  18. $str = substr($str, 0, strlen($str)-1);
  19.  
  20. $this -> pack = pack($str);
  21. }
  22.  
  23. public function unpack($strFormat) {
  24. return unpack ($strFormat, $this -> pack);
  25. }
  26. }
  27.  
  28. ?>


Próbuje przy użyciu foreach" title="Zobacz w manualu php" target="_manual, func_get_args" title="Zobacz w manualu php" target="_manual połączyć kolejno pobierane argumenty i zapisać je w zmiennej oddzielając je ."," ale wtedy cała zmienna $str traktowana jest jako jeden argumen. Jak sobie z tym poradzić ?

Pozrawiam.

Ten post edytował Levabul 9.12.2005, 20:56:22
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Levabul
post
Post #2





Grupa: Zarejestrowani
Postów: 197
Pomógł: 0
Dołączył: 11.07.2005

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


@nospor - nie wiem czy do funkcji pack można przekazywać jedną tablice zamiast poszczególnych argumentów.
@bregovic - takie rozwiązanie nic niedaje ponieważ join łączy wszystko w jeden string i niemożna tego wykożystac w funkcji pack jako kilka argumentów

Rozwiązanie otrzymałem na innym forum. Tym czego mi brakowało była funkcja eval (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)

  1. <?php
  2. class Pack {
  3.  
  4. public $pack;
  5.  
  6.  
  7. public function __construct($str = false) {
  8. if($str) {
  9. $this -> pack = $str;
  10. }
  11. }
  12.  
  13. public function pack() {
  14. $s = '';
  15. $tmp = array();
  16. foreach(func_get_args() as $key=>$val) {
  17. $tmp['p'.$key] = $val;
  18. if(!empty($s)) $s .= ',';
  19. $s .= '$p'.$key;
  20. }
  21. extract($tmp);
  22. eval('$this -> pack = pack('.$s.');');
  23. }
  24.  
  25. public function unpack ($strFormat) {
  26. return unpack ($strFormat, $this -> pack);
  27. }
  28. }
  29.  
  30. #przyklad
  31.  
  32. $paczka = new pack ();
  33. $paczka -> pack ("nvc*", 0x1234, 0x5678, 65, 66);
  34. echo $paczka -> pack;
  35.  
  36. ?>


Wiem że mało to wydajne ale trudno ...
Go to the top of the page
+Quote Post

Posty w temacie


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: 6.10.2025 - 20:59