Spis treści
Klasa Zend_Loader zawiera metody pomagające ci w dynamicznym ładowaniu plików.
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
|
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 17.1. Przykład użycia metody loadFile()
<?php 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()
.
Statyczna metoda Zend_Loader::loadClass($class, $dirs)
ładuje plik PHP, a następnie sprawdza czy dana klasa istnieje.
Przykład 17.2. Przykład użycia metody loadClass()
<?php 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 (".").
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 17.3. Przykład użycia metody isReadable()
<?php 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.
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 17.4. Przykład zarejestrowania metody autoloadera
<?php 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.