Á¦21Àå Zend_Loader

¸ñÂ÷

21.1. ÆÄÀÏÀ̳ª Ŭ·¡½ºÀÇ µ¿ÀûÀÎ Àбâ
21.1.1. ÆÄÀÏÀÇ Àбâ
21.1.2. Ŭ·¡½ºÀÇ Àбâ
21.1.3. ÆÄÀÏÀÌ Àоîµé¿© °¡´ÉÇÒÁöÀÇ È®ÀÎ
21.1.4. Autoloader ÀÇ »ç¿ë¹ý
21.2. Ç÷¯±× ÀÎÀÇ ·Îµå
21.2.1. ±âº»ÀûÀÎ »ç¿ë¿¹
21.2.2. Ç÷¯±× ÀÎÀÇ ÆÐ½ºÀÇ Á¶ÀÛ
21.2.3. Ç÷¯±× ÀÎÀÇ È®Àΰú Ŭ·¡½º¸íÀÇ Ãëµæ

21.1. ÆÄÀÏÀ̳ª Ŭ·¡½ºÀÇ µ¿ÀûÀÎ Àбâ

Zend_Loader Ŭ·¡½º´Â, ÆÄÀÏÀ» µ¿ÀûÀ¸·Î ÀоîµéÀ̱â À§ÇÑ ¸Þ¼Òµå¸¦ Á¦°øÇÕ´Ï´Ù.

[ÆÁ] Zend_Loader ´ë require_once()

Zend_Loader ÀÇ ¸Þ¼Òµå´Â, ÀоîµéÀÌ°í ½ÍÀº ÆÄÀÏÀÇ À̸§ÀÌ º¯È­ÇÏ´Â °æ¿ì¿¡ Æí¸®ÇÕ´Ï´Ù. ¿¹¸¦ µé¾î, À¯ÀúÀÇ ÀÔ·ÂÀ̳ª ¸Þ¼ÒµåÀÇ ÀμöµîÀÇ ÆÄ¶ó¹ÌÅÍ¿¡ ±Ù°ÅÇÑ ÆÄÀϸíÀ» »ç¿ëÇÏ´Â °æ¿ì µîÀÔ´Ï´Ù. ¸¸¾à ÀоîµéÀÌ´Â ÆÄÀÏÀ̳ª Ŭ·¡½ºÀÇ À̸§ÀÌ Á¤ÇØÁ® ÀÖ´Â °æ¿ì´Â, require_once() (¿Í)°ú °°Àº PHP ÀÇ ÇÔ¼ö´Â ¾Æ´Ï°í ±»ÀÌ Zend_Loader (À»)¸¦ »ç¿ëÇÏ´Â ¸Þ¸®Æ®´Â ¾ø½À´Ï´Ù.

21.1.1. ÆÄÀÏÀÇ Àбâ

Á¤Àû ¸Þ¼Òµå Zend_Loader::loadFile() (Àº)´Â,PHP ÆÄÀÏÀ» ÀоîµéÀÔ´Ï´Ù. ÀÐÈ÷´Â ÆÄÀÏ¿¡´Â ÀÓÀÇÀÇ PHP Äڵ带 Æ÷ÇÔÇÒ ¼ö ÀÖ½À´Ï´Ù. ÀÌ ¸Þ¼Òµå´Â PHP ÇÔ¼ö include() ÀÇ ·¡ÆÛ·Î, ½ÇÆÐÇßÀ» °æ¿ì (¿¹¸¦ µé¾î ÁöÁ¤ÇÑ ÆÄÀÏÀÌ Á¸ÀçÇÏÁö ¾Ê´Â µî) ¿¡´Â Zend_Exception (À»)¸¦ ½½·Î¿ì ÇÕ´Ï´Ù.

·Ê 21.1. loadFile() ¸Þ¼ÒµåÀÇ ¿¹


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

Àμö $filename ¿¡´Â ÀоîµéÀÌ´Â ÆÄÀϸíÀ» ÁöÁ¤ÇÕ´Ï´Ù. ¿©±â¿¡´Â ÆÐ½º Á¤º¸¸¦ Æ÷ÇÔÇØ¼­´Â ¾ÈµË´Ï´Ù.$filename ¿¡ ´ëÇØ¼­´Â ½ÃÅ¥·¯Æ¼ üũ¸¦ ÇÕ´Ï´Ù. $filename ¿¡ Æ÷ÇÔÇÒ ¼ö ÀÖ´Â °ÍÀº ¿µ¼ýÀÚ, µ¥½¬ ("-"), ¾ð´õ ½ºÄÚ¾Æ ("_") ȤÀº ÇǸ®¿Àµå (".") »ÓÀÔ´Ï´Ù. Àμö $dirs ¿¡´Â ±×·¯ÇÑ Á¦ÇÑÀº ¾ø½À´Ï´Ù.

Àμö $dirs ¿¡´Â ÆÄÀÏÀ» ã´Â µð·ºÅ丮¸¦ ÁöÁ¤ÇÕ´Ï´Ù. NULL ÀÇ °æ¿ì´Â include_path ¾ÈÀÇ ºÁ¸¦ ´ë»óÀ¸·Î ÇÕ´Ï´Ù. ¹®ÀÚ¿­ ȤÀº ¹è¿­À» ÁöÁ¤Çϸé, ÁöÁ¤µÈ µð·ºÅ丮¸¦ ¿ì¼± ãÀº ´ÙÀ½¿¡, ±×¸®°í include_path (À»)¸¦ ã½À´Ï´Ù.

Àμö $once (Àº)´Â ³í¸®Ä¡ÀÔ´Ï´Ù.TRUE (À»)¸¦ ÁöÁ¤Çϸé, Zend_Loader::loadFile() ÇÏ PHP ÀÇ ÇÔ¼ö include_once() ±×¸®°í ÆÄÀÏÀ» ÀоîµéÀÔ´Ï´Ù.±× ÀÌ¿ÜÀÇ °æ¿ì´Â include() (À»)¸¦ »ç¿ëÇÕ´Ï´Ù.

21.1.2. Ŭ·¡½ºÀÇ Àбâ

Á¤Àû ¸Þ¼Òµå Zend_Loader::loadClass($class, $dirs) (Àº)´Â,PHP ÆÄÀÏÀ» Àоîµé¿© Ŭ·¡½º°¡ Á¸ÀçÇÒÁö¸¦ È®ÀÎÇÕ´Ï´Ù.

·Ê 21.2. loadClass() ¸Þ¼ÒµåÀÇ ¿¹


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

Ŭ·¡½º¸¦ ÁöÁ¤ÇÏ´Â ¹®ÀÚ¿­Àº, ¾ð´õ ½ºÄھƸ¦ ÆÐ½º ´Ü¶ô ¹®ÀÚ·Î º¯È¯ÇØ, ¸¶Áö¸·¿¡ '.php' (À»)¸¦ Ãß°¡µË´Ï´Ù.À§ÀÇ ¿¹¿¡¼­´Â, 'Container_Tree' ÇÏ 'Container/Tree.php' µË´Ï´Ù.

$dirs ¿¡ ¹®ÀÚ¿­ ȤÀº ¹è¿­À» ÁöÁ¤Çϸé, Zend_Loader::loadClass() (Àº)´Â ÁöÁ¤ÇÑ ¼ø¼­¿¡ ±× µð·ºÅ丮¸¦ ã½À´Ï´Ù. ±×¸®°í ÃÖÃÊ·Î ¹ß°ßµÈ ÆÄÀÏÀ» ÀоîµéÀÔ´Ï´Ù. µð·ºÅ丮 $dirs ¿¡ ÆÄÀÏÀÌ ¹ß°ßµÇÁö ¾Ê´Â °æ¿ì´Â, PHP ÀÇ include_path ±×¸®°í ÁöÁ¤µÈ Àå¼Ò¸¦ ã½À´Ï´Ù.

ÆÄÀÏÀÌ ¹ß°ßµÇÁö ¾Ê´Â °æ¿ì, ȤÀº ÀоîµéÀÎ ÆÄÀÏ¿¡ Ŭ·¡½º°¡ Á¸ÀçÇÏÁö ¾Ê´Â °æ¿ì´Â Zend_Loader::loadClass() ÇÏ Zend_Exception (À»)¸¦ ½½·Î¿ì ÇÕ´Ï´Ù.

ÆÄÀÏÀÇ Àб⿡´Â Zend_Loader::loadFile() (À»)¸¦ »ç¿ëÇϹǷÎ, Ŭ·¡½º¸íÀ¸·Î¼­ ÁöÁ¤ÇÒ ¼ö ÀÖ´Â °ÍÀº ¿µ¼ýÀÚ¿Í ÇÏÀÌÇ ('-'), ¾ð´õ ½ºÄÚ¾Æ ('_') ±×¸®°í ÇǸ®¿Àµå ('.') »ÓÀÔ´Ï´Ù.

21.1.3. ÆÄÀÏÀÌ Àоîµé¿© °¡´ÉÇÒÁöÀÇ È®ÀÎ

Á¤Àû ¸Þ¼Òµå Zend_Loader::isReadable($pathname) (Àº)´Â, ÁöÁ¤ÇÑ Àå¼Ò¿¡ ÆÄÀÏÀÌ Á¸ÀçÇØ Àоîµé¿© °¡´ÉÇÑ °æ¿ì¿¡ TRUE, ±× ÀÌ¿ÜÀÇ °æ¿ì¿¡ FALSE (À»)¸¦ µ¹·ÁÁÝ´Ï´Ù.

·Ê 21.3. isReadable() ¸Þ¼ÒµåÀÇ ¿¹


<?php
if (Zend_Loader::isReadable($filename)) {
    
// $filename ±×¸®°í ¹«¾ùÀΰ¡¸¦ ÇÕ´Ï´Ù
}

Àμö $filename ±×¸®°í, Á¶»çÇÏ°í ½ÍÀº ÆÄÀϸíÀ» ÁöÁ¤ÇÕ´Ï´Ù. ¿©±â¿¡´Â ÆÐ½º Á¤º¸¸¦ Æ÷ÇÔÇÒ ¼öµµ ÀÖ½À´Ï´Ù. ÀÌ ¸Þ¼Òµå´Â,PHP ÀÇ ÇÔ¼ö is_readable() ÀÇ ·¡ÆÛÀÔ´Ï´Ù.ÀÌ ÇÔ¼ö´Â include_path (À»)¸¦ ãÁö ¾Ê½À´Ï´Ù¸¸,Zend_Loader::isReadable() ÇÏ include_path µµ °Ë»ö ´ë»óÀ¸·Î Æ÷ÇÔÇÕ´Ï´Ù.

21.1.4. Autoloader ÀÇ »ç¿ë¹ý

Zend_Loader Ŭ·¡½º¿¡´Â,PHP ÀÇ SPL ÀÚµ¿ ·Î´õ¿¡ µî·ÏÇϱâ À§ÇÑ ¸Þ¼Òµå°¡ Æ÷ÇԵǾî ÀÖ½À´Ï´Ù.±× ÄÝ¹é ¸Þ¼Òµå°¡ Zend_Loader::autoload() ÀÔ´Ï´Ù.Æí¸®¼ºÀ» °í·ÁÇϰí, Zend_Loader ±×·³ registerAutoload() ÇÔ¼ö¸¦ Á¦°øÇϰí ÀÖ½À´Ï´Ù. ÀÌ ÇÔ¼ö´Â,autoload() ¸Þ¼Òµå¸¦ µî·ÏÇÏ´Â °ÍÀÔ´Ï´Ù. spl_autoload È®Àå ¸ðµâÀ» »ç¿ëÇÒ ¼ö ¾ø´Â ȯ°æÀÇ °æ¿ì´Â, registerAutoload() ¸Þ¼Òµå´Â Zend_Exception (À»)¸¦ ½½·Î¿ì ÇÕ´Ï´Ù.

·Ê 21.4. ÀÚµ¿ ·Î´õ¿ë ÄÝ¹é ¸Þ¼ÒµåÀÇ µî·Ï¿¹


<?php
Zend_Loader
::registerAutoload();

Zend Framework ÀÇ autoload ÄݹéÀ» µî·ÏÇϸé, ¸í½ÃÀûÀ¸·Î ÀоîµéÀÌÁö ¾Ê¾Æµµ Zend Framework ÀÇ Å¬·¡½º¸¦ ÂüÁ¶ÇÒ ¼ö ÀÖ°Ô µË´Ï´Ù. autoload() ¸Þ¼Òµå´Â, Ŭ·¡½º¸¦ ÂüÁ¶ÇÒ ¶§¿¡ ÀÚµ¿ÀûÀ¸·Î Zend_Loader::loadClass() (À»)¸¦ »ç¿ëÇÕ´Ï´Ù.

Zend_Loader Ŭ·¡½º¸¦ °è½ÂÇßÀ» °æ¿ì´Â,registerAutoload() ¿¡ Àμö¸¦ Ãß°¡ÇÒ ¼ö ÀÖ½À´Ï´Ù.ÀÌ Àμö·Î, ¾î´À Ŭ·¡½º·ÎºÎÅÍ autoload() ¸Þ¼Òµå¸¦ µî·ÏÇÏ´ÂÁö¸¦ ÁöÁ¤ÇÕ´Ï´Ù.

·Ê 21.5. autoload ÄÝ¹é ¸Þ¼Òµå¸¦ °è½Â Ŭ·¡½º·ÎºÎÅÍ µî·ÏÇÏ´Â ¿¹

PHP ¿¡ À־ÀÇ Á¤Àû ÇÔ¼öÀÇ ÂüÁ¶ÀÇ ¹æ¹ý»ó, loadClass() (¿Í)°ú autoload() ÀÇ ¾çÂÊ ¸ðµÎÀÇ Äڵ带 ½ÇÀåÇÒ Çʿ䰡 ÀÖ½À´Ï´Ù. ±×¸®°í,autoload() ±×·³ self::loadClass() (À»)¸¦ ÄÝ ÇÏÁö ¾ÊÀ¸¸é ¾ÈµË´Ï´Ù. ÀÛ¼ºÇÑ´Ù autoload() ¸Þ¼Òµå°¡ ģŬ·¡½º¿¡ self::loadClass() ÀÇ Ã³¸®¸¦ ¸Ã±ä´Ù¸é, ¼­ºê Ŭ·¡½ºÀÇ ¸Þ¼Òµå´Â ¾Æ´Ï°í ģŬ·¡½ºÃøÀÇ µ¿¸íÀÇ ¸Þ¼Òµå¸¦ ÄÝ ÇÕ´Ï´Ù.


<?php
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');

autoload ÄݹéÀ» »èÁ¦ÇÒ ¼öµµ ÀÖ½À´Ï´Ù. registerAutoload() ¿¡´Â ¿É¼ÇÀ¸·Î 2 ¹øÂ°ÀÇ Àμö¸¦ ÁöÁ¤ÇÒ ¼ö ÀÖ¾î µðÆúÆ®¿¡¼­´Â true ÇÏÁö¸¸ ¼³Á¤µÇ°Ô µÇ¾î ÀÖ½À´Ï´Ù. ÀÌ Àμö¸¦ false (À¸)·Î Çϸé, ÁöÁ¤ÇÑ ÄݹéÀÌ SPL ÀÇ autoload ½ºÅÃÀ¸·ÎºÎÅÍ »èÁ¦µË´Ï´Ù.