OOP v PHP: Standard PHP Library (SPL) – základní funkce

15. února 2006

Na knihovnu SPL jste už mohli narazit v souvislosti s rozhraním Iterator. Zmíněná knihovna však nabízí i další funkce, rozhraní a třídy, které mohou být v praxi velmi užitečné. Náplní tohoto článku je popis funkcí SPL knihovny.

Základní funkce

Funkce spl_classes() vypíše všechny dostupné třídy a rozhraní, které SPL knihovna nabízí. Ve verzi PHP 5.2.1 je standardně nabízeno 30 SPL tříd a rozhraní. Zde je jejich seznam:

AppendIterator
ArrayIterator
ArrayObject
CachingIterator
Countable
DirectoryIterator
EmptyIterator
FilterIterator
InfiniteIterator
IteratorIterator
LimitIterator
NoRewindIterator
OuterIterator
ParentIterator
RecursiveArrayIterator
RecursiveCachingIterator
RecursiveDirectoryIterator
RecursiveFilterIterator
RecursiveIterator
RecursiveIteratorIterator
RecursiveRegexIterator
RegexIterator
SeekableIterator
SimpleXMLIterator
SplFileInfo
SplFileObject
SplObjectStorage
SplObserver
SplSubject
SplTempFileObject

Funkce spl_object_hash() vytváří unikátní ID hash, který lze použít pro identifikaci určitého objektu (id je vždy stejné, například 1428dcbc998ce0ca5919af7f4deac714).

Velmi užitečná je funkce iterator_count(), která spočítá počet elementů v iterátoru. Jako parametr přijímá objekt, který implementuje rozhraní Traversable. Pokud budete například chtít zjistit počet položek v aktuálním adresáři, můžete to udělat takto:

<?php 
echo iterator_count(new DirectoryIterator('./')); //ještě je třeba odečíst "./" a "../" 
?>

Funkce iterator_to_array() umožňuje překopírovat položky iterátoru do pole (iterátor opět musí implementovat rozhraní Traversable). Poslední dvě funkce byly přidány do PHP 5.1.3.

Funkce pro automatické nahrávání

O automatickém nahrávání tříd do projektu jsem už psal v článku Autoloading. Kromě funkce __autoload() je ale možné použít od verze PHP 5.1.2 sadu funkcí spl_autoload_*.

Funkce spl_autoload_register() umožňuje zaregistrovat funkci pro automatické nahrávání tříd. Přijímá jeden parametr, který specifikuje název funkce nebo metody, která bude pro autoload použita. Funkce vrací v případě úspěchu boolean hodnotu true, pokud se soubor nepodaří nahrát, vrací false.

<?php 
class Interval 
{ 
    public static function autoload($class) 
    { 
        $file = strtolower($class) . '.php'; 
        return self::_autoload($file); 
    } 

    public static function autoload2($class) 
    { 
        $file = strtolower(str_replace('_', '/', $class)) . '.php'; 
        return self::_autoload($file); 
    } 

    private static function _autoload($file) 
    { 
        if (file_exists($file)) { 
            require_once $file; 
            return true; 
        } 
        return false; 
    } 
} 

spl_autoload_register(array('Interval', 'autoload')); 
spl_autoload_register(array('Interval', 'autoload2')); 

$class = new Example(); 
$class2 = new Example_Example();

Jestliže funkci nepředáte žádný parametr, použije se výchozí nastavení funkce spl_autoload(). Pokud chcete nyní použít funkci __autoload(), musíte ji zaregistrovat podobně jako ostatní.

Opakem k výše zmíněné funkci je funkce spl_autoload_unregister(), která funkci pro autoload odregistruje. Funkce spl_autoload_functions() vrací seznam všech zaregistrovaných funkcí pro automatické nahrávání tříd. Díky funkci spl_autoload_call() můžete manuálně zavolat všechny autoload funkce pro automatické nahrávání tříd do projektu.

Funkce spl_autoload() určuje výchozí nastavení pro funkci __autoload(). Pokud bude zavolána funkce spl_autoload_register() bez parametrů, pak se zavolá funkce spl_autoload() a bude jí předán název třídy jako parametr. Funkce název převede na malá písmena a přidá koncovku .php či .inc (ve výchozí podobě) a zkusí třídu načíst. Funkcí spl_autoload_extensions je pak možné specifikovat koncovky souborů.

spl_autoload_extensions('.class.php'); 
spl_autoload_register(); 
//pokusí se vyhledat soubor example.class.php 
$class = new Example();

Pozn. red.: Zdůrazňujeme, že tento text se týká PHP 5.

Štítky: oop-php

Mohlo by vás také zajímat

Nejnovější

1 komentář

  1. MARTIN

    Dub 14, 2011 v 11:38

    mám strašně malé písmena když otevřu jiné položky než internet co mám dělat?

    Odpovědět

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *