Wprowadzenie do Zend Framework

     Nauka Zend Framework

    appendix

     Przewodnik po Zend Framework


  • Zend_Gdata
  • Zend_Http
  • Zend_InfoCard
  • Zend_Json
  • Zend_Layout
  • Zend_Ldap
  • Zend_Loader
  • Zend_Locale
  • Zend_Log
  • Zend_Mail
  • Zend_Markup
  • Zend_Measure
  • Zend_Memory
  • Zend_Mime
  • Zend_Navigation
  • Zend_Oauth
  • Zend_OpenId
  • Zend_Paginator
  • Zend_Pdf
  • Zend_ProgressBar
  • Zend_Queue
  • Zend_Reflection
  • Zend_Registry
  • Zend_Rest

  • Zend_Search_Lucene
  • Zend_Serializer
  • Zend_Server
  • Zend_Service
  • Zend_Session
  • Zend_Soap
  • Zend_Tag
  • Zend_Test
  • Zend_Text
  • Zend_TimeSync
  • Zend_Tool
  • Zend_Tool_Framework
  • Zend_Tool_Project
  • Zend_Translate
  • Zend_Uri
  • Zend_Validate
  • Zend_Version
  • Zend_View
  • Zend_Wildfire
  • Zend_XmlRpc
  • ZendX_Console_Process_Unix
  • ZendX_JQuery
  • Translation 21.3% Update 2011-11-16 - Revision 24356 - Version ZF 1.11.x

    Rozdział 40. Zend_Loader

    40.1. Dynamiczne ładowanie plików i klas

    Klasa Zend_Loader zawiera metody pomagające ci w dynamicznym ładowaniu plików.

    [Podpowiedź] Zend_Loader a require_once()

    Metody klasy Zend_Loader są przydatne gdy nazwa pliku, który chcesz załadować jest zmienną. Na przykład, jeśli nazwa jest oparta na parametrze pochodzącym od użytkownika lub argumencie metody. Jeśli ładujesz plik lub klasę których nazwą jest stała, nie ma dodatkowych korzyści z użycia Zend_Loader zamiast tradycyjnych funkcji PHP takich jak require_once().

    40.1.1. Ładowanie plików

    Statyczna metoda Zend_Loader::loadFile() ładuje plik PHP. Ładowany plik może zawierać dowolny kod PHP. Ta metoda używa funkcji PHP include(). Metoda ta wyrzuca wyjątek Zend_Exception w przypadku niepowodzenia, na przykład gdy dany plik nie istnieje.

    Przykład 40.1. Przykład użycia metody loadFile()

    Zend_Loader::loadFile($filename$dirs=null$once=false);

    Argument $filename określa nazwę pliku do załadowania, nazwa ta nie może zawierać żadnych informacji o ścieżce. Parametr $filename jest sprawdzany pod kątem bezpieczeństwa. Argument $filename może zawierać jedynie znaki alfanumeryczne, myślniki ("-"), podkreślniki ("_"), oraz kropki ("."). Argument $dirs może być dowolny.

    Argument $dirs określa katalogi, które mają być sprawdzone w poszukiwaniu pliku. Jeśli ma wartość NULL, sprawdzane są jedynie ścieżki z dyrektywy include_path. Jeśli jest łańcuchem znaków lub tablicą, ścieżka lub ścieżki będą przeszukane, a następnie zostaną sprawdzone ścieżki z dyrektywy include_path.

    Argument $once jest zmienną logiczną. Jeśli ma wartość TRUE, to metoda Zend_Loader::loadFile() używa do ładowania pliku funkcji PHP include_once(), w przeciwnym wypadku używa funkcji PHP include().

    40.1.2. Ładowanie klas

    Statyczna metoda Zend_Loader::loadClass($class, $dirs) ładuje plik PHP, a następnie sprawdza czy dana klasa istnieje.

    Przykład 40.2. Przykład użycia metody loadClass()

    Zend_Loader::loadClass('Container_Tree',
        array(
            
    '/home/production/mylib',
            
    '/home/production/myapp'
        
    )
    );

    Łańcuch znaków określający nazwę klasy jest konwertowany do relatywnej ścieżki przez zamianę podkreślników na separatory ścieżek, oraz przez dodanie na końcu nazwy rozszerzenia '.php'. W powyższym przykładzie, nazwa 'Container_Tree' staje się 'Container\\Tree.php'.

    Jeśli argument $dirs jest łańcuchem znaków lub tablicą, metoda Zend_Loader::loadClass() przeszuka ścieżki w kolejności ich zdefiniowania. Pierwszy pasujący plik zostanie załadowany. Jeśli plik nie istnieje w ścieżkach ze zmiennej $dirs, to przeszukiwane są ścieżki z dyrektywy include_path środowiska PHP.

    Jeśli plik nie zostanie znaleziony lub po załadowaniu pliku klasa nie istnieje, metoda Zend_Loader::loadClass() wyrzuca wyjątek Zend_Exception.

    Do ładowania używana jest metoda Zend_Loader::loadFile(), więc nazwa klasy może zawierać jedynie znaki alfanumeryczne, myślniki ("-"), podkreślniki ("_"), oraz kropki (".").

    40.1.3. Sprawdzanie czy plik jest dostępny do odczytu

    Statyczna metoda Zend_Loader::isReadable($pathname) zwraca TRUE jeśli plik w określonej ścieżce istnieje i jest dostępny do odczytu, w przeciwnym wypadku zwracana jest wartość FALSE.

    Przykład 40.3. Przykład użycia metody isReadable()

    if (Zend_Loader::isReadable($filename)) {
        
    // zrób coś z $filename
    }

    Argument $filename określa nazwę pliku do sprawdzenia. Może on zawierać informacje o ścieżce. Ta metoda używa funkcji PHP is_readable(). Funkcja PHP nie sprawdza ścieżek z dyrektywy include_path, a metoda Zend_Loader::isReadable() sprawdza.

    40.1.4. Użycie Autoloadera

    Klasa Zend_Loader zawiera metodę, którą możesz zarejestrować jako autoloader PHP SPL. Tą metodą jest Zend_Loader::autoload(). Dla wygody klasa Zend_Loader posiada metodę registerAutoload() rejestrującą swoją własną metodę autoload(). Jeśli rozszerzenie spl_autoload nie jest zainstalowane w środowisku PHP, to metoda registerAutoload() wyrzuca wyjątek Zend_Exception.

    Przykład 40.4. Przykład zarejestrowania metody autoloadera

    Z powodu semantyki referencji do statycznych funkcji w PHP, musisz zaimplementować kod zarówno dla metody loadClass() jak i dla metody autoload(), a metoda autoload() musi wywołać metodę self::loadClass(). Jeśli twoja metoda autoload() odnosi się do klasy rodzica i wywołuje metodę self::loadClass(), wtedy wywołuje metodę o tej nazwie pochodzącą z klasy rodzica, a nie z klasy rozszerzonej.

    Zend_Loader::registerAutoload();

    Po zarejestrowaniu metody autoload z Zend Framework, możesz odwoływać się do klas Zend Framework bez konieczności ładowania każdej z nich z osobna. Metoda autoload() używa metody Zend_Loader::loadClass() automatycznie gdy odwołujesz się do klasy.

    Jeśli rozszerzyłeś klasę Zend_Loader, możesz przekazać opcjonalny argument do metody registerAutoload(), aby określić klasę, której metoda autoload() ma zostać zarejestrowana.

    Przykład 40.5. Przykład rejestrowania metody autoloadera z rozszerzonej klasy

    class My_Loader extends Zend_Loader
    {
        public static function 
    loadClass($class$dirs null)
        {
            
    parent::loadClass($class$dirs);
        }

        public static function 
    autoload($class)
        {
            try {
                
    self::loadClass($class);
                return 
    $class;
            } catch (
    Exception $e) {
                return 
    false;
            }
        }
    }

    Zend_Loader::registerAutoload('My_Loader');

    Możesz usunąć metodą autoloadera. Metoda registerAutoload() przyjmuje opcjonalny drugi argument, ktorego wartością domyślna jest true. Jeśli ten argument ma wartość false, metoda autoloadera zostanie wyrejestrowana ze stosu autoloaderów SPL.

    digg delicious meneame google twitter technorati facebook

    Comments

    Loading...