Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Funkcja wywolania zwrotnego dla array_walk
Forum PHP.pl > Forum > Przedszkole
pawel81
Witam;

Napisałem klasę tworzacą ścieżke do pliku lub katalogu.
Problem polega na tym, że nie wiem jak poradzić sobie z funkcją wywołania zwrotnego callback (jak mam ją przekazać do fumkcji array_walk) próbowałem self::callback(), $this->calback().

  1. <?php
  2. //require_once ( 'class.CallGetSet.php' );
  3.  
  4.  
  5. class dirCreator //extends callGetSet
  6. {
  7.    public $cataloguelist = null;
  8.    private $path = null;
  9.  
  10.    public function __construct()
  11.    {
  12.        #Siezka do pliku
  13.        define( 'PATH_BASE', dirname( __file__ ) );
  14.        #Separator
  15.        define( 'DS', DIRECTORY_SEPARATOR );
  16.        #Siezka do pliku z separatoren
  17.        $this->path = PATH_BASE . DS;
  18.    }
  19.  
  20.    public function __toString()
  21.    {
  22.        return __class__;
  23.    }
  24.    
  25.    public function createArray()
  26.    {
  27.        $this->cataloguelist = func_get_args();
  28.       }
  29.  
  30.    private function callback($catalogue)
  31.    {
  32.        $this->path .= $catalogue . DS;
  33.    }
  34.  
  35.    public function creator()
  36.    {
  37.        if ( $this->cataloguelist )
  38.        {
  39.            array_walk( $this->cataloguelist, self::callback() );
  40.        }
  41.        return $this->path;
  42.    }
  43. }
  44. $t = new dirCreator;
  45. $t->createArray('kat1', 'kat2', 'kat3');
  46. echo $t->creator();
  47. ?>



Przepisałem kod proceduralnie i dziala

  1. <?php
  2. define( 'PATH_BASE', dirname(__file__) );
  3. #Separator
  4. define( 'DS', DIRECTORY_SEPARATOR );
  5.  
  6. $path = PATH_BASE . DS;
  7. $cataloguelist = array('kat1', 'kat2', 'kat3');
  8.  
  9. function callback($catalogue)
  10. {
  11.    global $path;
  12.    $path .= $catalogue . DS;
  13. }
  14.  
  15. function creator($cataloguelist)
  16. {
  17.    global $path;
  18.    if ( $cataloguelist )
  19.    {
  20.        array_walk( $cataloguelist, 'callback' );
  21.    }
  22.    return $path;
  23. }
  24.  
  25. echo creator($cataloguelist);
  26. ?>
skowron-line
Niewiem czy o to dokładnie chodzi ale
  1. <?php
  2. array_walk( array( __CLASS__, 'nazwa_metody' )
  3. ?>

http://pl.php.net/manual/pl/function.array-walk.php#84193
pawel81
Tak dokładnie o to.
Wielkie dzięki!!!

  1. <?php
  2. class dirCreator
  3. {
  4.    public $catalogueList = null;
  5.    private $path = null;
  6.  
  7.    public function __construct()
  8.    {
  9.        #Siezka do pliku
  10.        define( 'PATH_BASE', dirname(__file__) );
  11.        #Separator
  12.        define( 'DS', DIRECTORY_SEPARATOR );
  13.    }
  14.    
  15.    #Tworzy tablice z parametrow podanych funkcji
  16.    public function creatCatalogueList()
  17.    {
  18.        $this->catalogueList = func_get_args();
  19.    }
  20.  
  21.    #Zwraca sciezke do pliku
  22.    public function getPathBase()
  23.    {
  24.        return PATH_BASE;
  25.    }
  26.    
  27.    #Zwraca separator
  28.      public function getDicectorySeparator()
  29.    {
  30.        return DS;
  31.    }
  32.  
  33.    #Funkcja wywolania zwrotnego arrayWalk()
  34.    private function callback( $catalogue )
  35.    {
  36.        $this->path .= ($catalogue == FALSE ? DS : DS.$catalogue) ;
  37.    }
  38.    
  39.    /**
  40.      * Tworzy sciezke
  41.      * Podanie ostatniego parametru jako false oznacza sciezke do pliku
  42.      * $this->catalogueList( 'folder', 'folder2', false ); G:HTDocsfolderfolder2
  43.      * $this->catalogueList( 'folder', 'index.php' ); G:HTDocsfolderindex.php
  44.      *
  45.      * ...->creator( 'folder', 'folder2', false );
  46.      */
  47.    public function creator()
  48.    {
  49.        if( func_num_args() > 0 )
  50.        {
  51.              $this->catalogueList = func_get_args();
  52.        }
  53.        
  54.        if ( $this->catalogueList )
  55.        {
  56.            $this->path = PATH_BASE;
  57.            array_walk( $this->catalogueList, array(__class__, 'callback') );
  58.            $this->catalogueList = null;
  59.        }
  60.        return $this->path;
  61.    }
  62. }
  63. ?>


Troche ja poprawilem

Mam jeszcze pytanie odnosnie stalych klasy, nie mozna przypisywac im wyniku dzialania funkcji i wartosci zmiennych.
Zdefiniowalem wiec stale w konstruktorze za pomocą funkcji define()
  1. <?php
  2. public function __construct()
  3.   {
  4.       #Siezka do pliku
  5.       define( 'PATH_BASE', dirname(__file__) );
  6.       #Separator
  7.       define( 'DS', DIRECTORY_SEPARATOR );
  8.   }
  9. ?>

maja one zasieg globalny i sa widziane poza obiektem klasy, tym samym metody
  1. <?php
  2. #Zwraca sciezke do pliku
  3.   public function getPathBase()
  4.   {
  5.       return PATH_BASE;
  6.   }
  7.  
  8.   #Zwraca separator
  9.     public function getDicectorySeparator()
  10.   {
  11.       return DS;
  12.   }
  13. ?>

sa zbedne.
Czy mozna zdefiniowac stale w ciele klasy, ktore beda mialy zasieg lokalny i bedzie mozna im przypisac wynik dzialania funkcji?
Fifi209
Tak.

  1. <?php
  2. class test {
  3. cont stala='a';
  4. }
  5.  
  6. echo test::stala;
  7. ?>
pawel81
Jak wcześniej wspomniałem stałym klasy nie można przypisywać wyniku działania funkcji lub wartości zmiennych czyli poniższa definicja jest błędna

  1. <?php
  2. class test
  3. {
  4.    cont PATH_BASE = dirname(__file__);
  5. }
  6.  
  7. echo test::PATH_BASE;
  8. ?>
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.