III. EFFICIENT (2)
12.  ÇÔ¼ö
ÅÛÇø´Ç¥Çö½Ä ³»¿¡ PHP ÇÔ¼ö¸¦ PHP ¹®¹ý´ë·Î ÀÚÀ¯·Ó°Ô »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. ´Ü, ÇÔ¼ö¸¦ »ç¿ëÇÒ ¶§´Â Ãâ·Â¸í·É¾î(=)¸¦ »ý·«ÇÒ ¼ö ¾ø½À´Ï´Ù.
{= date('Y-m-d h:i:s', timestamp) }
{= number_format(user.money) }
{= str_repeat( preg_replace('/\d+/', '', user.info), 10 ) }
{? empty(_COOKIE) || click=='first' || userFunc(arg) } hello {/}
¡Ø  ÇÔ¼ö Ç÷¯±×ÀÎ
»ç¿ëÀÚÁ¤ÀÇ ÇÔ¼ö¸¦ ¹èÆ÷µÈ Ç÷¯±×ÀÎ µð·ºÅ丮³»¿¡ 'function.ÇÔ¼öÀ̸§.php' ·Î ÀúÀ常 Çϸé, º°µµ·Î ÀÎŬ·çµåÇÒ ÇÊ¿ä¾øÀÌ ÅÛÇø´ ÆÄÀÏ ³»¿¡¼­ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.
function.returnHello.php
<?php
function returnHello($user) {
    return 'hello '.$user;
}
?>
index.php
...
$tpl->assign('user', 'Julia');
...
index.tpl
<div>
{= returnHello(user) }
</div>
>>output
<div>
Hello Julia
</div>
°°Àº À̸§ÀÇ ÇÔ¼ö°¡ ¿©·¯ ÇÏÀ§ÅÛÇø´¿¡ »ç¿ëµÇ°Å³ª, ¶Ç´Â PHP ÆÄÀÏ¿¡¼­ »ç¿ëµÉ °æ¿ì¿¡µµ ¿¡·¯¾øÀÌ ÇÊ¿äÇÑ ¸¸Å­¸¸ Á¤È®ÇÏ°Ô ÀÚµ¿ÀÎŬ·çµåµË´Ï´Ù.
½ÇÇà ÆÄÀÏ¿¡¼­ ÅÛÇø´¿ë »ç¿ëÀÚÁ¤ÀÇ ÇÔ¼ö¸¦ ¹Ì¸® ÀÎŬ·çµåÇØ¼­ »ç¿ëÇϰíÀÚ ÇÑ´Ù¸é, °£´ÜÈ÷ include_() ¸Þ¼­µå¸¦ ÀÌ¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.
$tpl->include_('returnHello');
$tpl->include_('returnHello', 'someUserFunc');
13.  »ó¼ö
Çü(type) ÁöÁ¤ÀÚ (¿¹¾à¾î) ÀÇ¹Ì »ç¿ë¹ý
c. (¶Ç´Â C.) µÚÀÇ ºÙÀº ¾ÆÀ̵𰡠»ó¼öÀÓ { c.CONSTANT }
PHP ¿¡ ³»ÀåµÈ »ó¼ö ¶Ç´Â define() ÇÔ¼ö¿¡ ÀÇÇÑ »ç¿ëÀÚÁ¤ÀÇ »ó¼ö¸¦ º°µµÀÇ ÇÒ´ç¾øÀÌ ÅÛÇø´³»¿¡¼­ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.
{ C.SOME_USER_CONSTANT }
{= htmlspecialchars( list.data.title, C.ENT_QUOTES ) }
{? userFunc(user.name, true) == false } some message {/}
true , false , null Àº »ó¼ö°¡ ¾Æ´Ñ ¿¹¾à¾îÀ̰í, C. ¸¦ ºÙÀÌÁö ¾Ê°í »ç¿ë°¡´ÉÇÕ´Ï´Ù.
14.  °´Ã¼
¿¬»êÀÚ »ç¿ë¹ý
-> { object->method() }, { object->property }
°´Ã¼ ¶ÇÇÑ Ç¥Çö½ÄÀÇ ±¸¼º¿ä¼Ò·Î ÀÚÀ¯·Ó°Ô »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.
{ user->getLevel() }
{= strftime('%Y-%m-%d', env.data->timestamp) }
°´Ã¼ »ç¿ë ¿¹Á¦ 
index.php
<?php
class PHP_CLASS {
    var $user = 'guest';
    function hello() {
        return 'hello! ' . $this->user;
    }
}
$phpobj = new PHP_CLASS;
$phpobj->user = 'julia';
include 'Template_.class.php';
$tpl = new Template_;
$tpl->define('index', 'index.tpl');
$tpl->assign('tplobj', $phpobj);
$tpl->print_('index');
?>
index.tpl
<div> { tplobj->user } </div><div> { tplobj->hello() } </div>
>> output
<div> julia </div><div> hello! juila </div>
´Ù¸¥ ÅÛÇø´º¯¼öó·³, °´Ã¼µµ Àü¿ªº¯¼ö¶ó¸é ¾ð´õ¹Ù¸¦ ºÙ¿©¼­ ÇÒ´çÀ» »ý·«ÇÒ ¼ö ÀÖ½À´Ï´Ù.
* ÅÛÇø´ ÆÄÀϳ»ÀÇ this ´Â ÅÛÇø´ °´Ã¼¸¦ ÂüÁ¶ÇÕ´Ï´Ù.
{ this->template_dir }
{= userFunc(this, arg1, arg2) }
 
¡Ø  °´Ã¼ Ç÷¯±×ÀÎ
Çü(type) ÁöÁ¤ÀÚ ÀÇ¹Ì »ç¿ë¹ý
p. (¶Ç´Â P.) µÚÀÇ ºÙÀº ¾ÆÀ̵𰡠Ç÷¯±×ÀÎ °´Ã¼ÀÓ { p.object }
Ŭ·¡½º À̸§ÀÌ "tpl_object_°´Ã¼¸í" ÀΠŬ·¡½º¸¦ Ç÷¯±×ÀÎ µð·ºÅ丮³»¿¡ 'object.°´Ã¼¸í.php' ÆÄÀÏ·Î ÀúÀ常 Çϸé, º°µµ·Î ÀÎŬ·çµå³ª ÃʱâÈ­ ¾øÀÌ ÅÛÇø´ ÆÄÀÏ ³»¿¡¼­ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.
object.say.php
<?php
class tpl_object_say {
    function tpl_object_say($user='guest') {     // constructor
        $this->user= $user;
    }
    function hello() {
        return 'Hello! '.$this->user;
    }
}
?>
index.tpl
<div> {p.say->hello()} </div>
>>output
<div> Hello! guest </div>
PHP ÆÄÀÏ¿¡¼­ ¹Ì¸® ÀÎŬ·çµåÇÏ¿© »ç¿ëÇϰųª, »ý¼ºÀÚÇÔ¼ö¿¡ ÀÎÀÚ¸¦ Àü´ÞÇÏ¿© ÃʱâÈ­ÇÏ·Á¸é,
new_() ¸Þ¼­µå¸¦ »ç¿ëÇÕ´Ï´Ù.
¸Þ¼­µå ÀÇ¹Ì »ç¿ë¹ý
new_() Ç÷¯±×ÀÎ °´Ã¼ ÃʱâÈ­/¸®ÅÏ $tpl->new_('°´Ã¼¸í', ÀÎÀÚ1, ÀÎÀÚ2,..)
index.php
<?php
include 'Template_.class.php';
$tpl = new Template_;
$tpl->define('index', 'index.tpl');
$tpl->new_('say', 'julia');
$tpl->print_('index');
?>
index.tpl
<div> {p.say->hello()} </div>
>>output
<div> Hello! julia </div>
¾Æ·¡¿Í °°ÀÌ ÃʱâÈ­ ÇÑ´Ù¸é. $obj °´Ã¼¿Í ÅÛÇø´ÆÄÀϳ»ÀÇ say °´Ã¼´Â µ¿ÀÏÇÑ °ÍÀÔ´Ï´Ù.
$obj = &$tpl->new_('say' ...);
Note:
PHP4 ¿¡¼­´Â &¸¦ ºÙÀÏ °æ¿ì ÅÛÇø´ ³»¿¡¼­ »ç¿ëµÉ °´Ã¼ÀÇ ÂüÁ¶¸¦ ¸®ÅÏÇϰí, ºÙÀÌÁö ¾ÊÀº °æ¿ì º¹»çº»À» ¸®ÅÏÇÕ´Ï´Ù. PHP5 ¿¡¼­´Â ¾î¶² °æ¿ì¿¡³ª ÂüÁ¶¸¦ ¸®ÅÏÇÕ´Ï´Ù.
15.  ºÐ±â(2) - switch
ºÐ±â¸í·É¾î(?) µÚ¿¡ ÇÑ °³ ÀÌ»óÀÇ case ¸í·É¾î (:) °¡ ÀÖÀ¸¸é switch ºÐ±â·Î ÇØ¼®µË´Ï´Ù.
¸í·É¾î ÀÇ¹Ì »ç¿ë¹ý
? [:] switch {? test_expression : label_expression ... }
: case, default (¿É¼Ç) {: label_expression ...}, {:}
/ endswitch {/}
¸í·É¾îµéÀº if ºÐ±â¹®, ·çÇÁ¹®°ú °øÅëµÇÁö¸¸ ¹®¸Æ¿¡ ÀÇÇØ ÇØ¼®µÇ°í, ´Ù¸¥ ±¸¹®µé°ú ÀÚÀ¯·Ó°Ô ÁßÃ¸ÇØ¼­ »ç¿ëÇÒ ¼ö ÀÖÀ¸¸ç, Á¤È®ÇÏ°Ô ÀÛ¼ºÇÏÁö ¾ÊÀ¸¸é ÅÛÇø´ º¯È¯±â°¡ ÀûÀýÇÑ ¿À·ù¸Þ¼¼Áö¸¦ Ãâ·ÂÇÕ´Ï´Ù.
PHP's switch Template_'s switch
<?php
switch ($fruit) {
    case 'banana':
        echo 'yellow';
        break;
    case 'apple':
    case 'strawberry':
        echo 'red';
        break;
    case $var :
        echo "color of ".$var;
        break;
    default :
        echo 'unknown';
}
?>
<!--{? _fruit :'banana'}-->
    yellow
<!--{:'apple' :'strawberry'}-->
    red
<!--{: _var}-->
    color of {_var}
<!--{:}-->
    unknown
<!--{/}-->
ÅÛÇø´ÅÂ±× ´ÜÀ§·Î break;°¡ ÀÚµ¿À¸·Î ºÙ½À´Ï´Ù. À̰ÍÀº ±â´É»óÀÇ Á¦¾àÀÌ ÀÖÁö¸¸, ÇÑ ÅÛÇø´ÅÂ±× ³»¿¡ case ¸í·É(:)À» ¿©·¯ ¹ø »ç¿ëÇÒ ¼ö ÀÖÀ¸¹Ç·Î, ¿©·¯ Á¶°Ç¿¡ ´ëÇÑ ÇÑ °¡Áö Ãâ·ÂÀÌ °¡´ÉÇÕ´Ï´Ù.
16.  ·çÇÁ(3) - Ç¥Çö½Ä
¾Æ·¡¿Í °°ÀÌ ·çÇÁ¸í·É¾î µÚ¿¡ ·çÇÁ¾ÆÀ̵ð ´ë½Å Ç¥Çö½ÄÀ» »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.
{@ P.myObj->getList() }
{@ range(1, list.estimation) }
Ç¥Çö½ÄÀº ·çÇÁ(1), ·çÇÁ(2) ¿¡¼­ ¼³¸íµÇ¾ú´ø ¹è¿­À» ¸®ÅÏÇÏ¸é µË´Ï´Ù. ·çÇÁ¾ÆÀ̵𰡠¾ø±â ¶§¹®¿¡ ÇØ´ç·çÇÁÀÇ º¯¼ö´Â ·çÇÁ¾ÆÀ̵𸦠»ý·«ÇÏ´Â ÇüŸ¸ °¡´ÉÇÏ°í ·çÇÁ¹Û¿¡¼­ÀÇ size_ »ç¿ëÀº °¡´ÉÇÏÁö ¾Ê½À´Ï´Ù.
¾Æ·¡ ¼¼ °¡Áö Áßø·çÇÁ´Â ¸ðµÎ °°½À´Ï´Ù.
{@ outer } {@ inner } {inner.var} {/} {/}
{@ outer } {@ .inner } {..var} {/} {/}
{@ outer } {@ outer.inner } {..var} {/} {/}
ù¹øÂ° inner ´Â ·çÇÁ¾ÆÀ̵ðÀ̰í, .inner ¿Í outer.inner ´Â Ç¥Çö½ÄÀÔ´Ï´Ù.
¡Ø  key_ , value_ ¸¦ ÀÌ¿ëÇÑ Áßø·çÇÁ ¿¹Á¦
function.getSomeList.php
<?php
function getSomeList() {
    ...
    $result = mysql_query('select group, item from some_table');
    $loop = array();
    while ($data = mysql_fetch_assoc($result)) {
        $loop[$data['group']][] = $data['item'];
    }
    return $loop;
}
?>
index.tpl
<table>
<!--{@ getSomeList()}-->
<tr><td>{.key_}</td><td>{@.value_}{..value_}, {/}</td></tr>
<!--{/}-->

</table>
>>output
<table>
<tr><td>fruit</td><td>apple, orange, pear,</td></tr>
<tr><td>sport</td><td>running, pingpong,</td></tr>
<tr><td>number</td><td>5, 100, 3, 65,</td></tr>

</table>
getSomeList() ÇÔ¼ö°¡ ¸®ÅÏÇÑ ¹è¿­Àº ´ÙÀ½°ú °°½À´Ï´Ù.
Array returned
array(
    'fruit' => array('apple', 'orange', 'pear'),
    'sport' => array('runging', 'pingpong'),
    'number'=> array(5, 100, 3, 65),
);
17.  PHP ÄÚµù
ÅÛÇø´ ÆÄÀÏ ³»¿¡¼­ PHP Äڵ带 »ç¿ëÇÒ ¼ö ÀÖÀ¸¸ç, PHP ÄÚµå ³»¿¡¼­ ÅÛÇø´ º¯¼ö¸¦ »ç¿ëÇϰųª, ÅÛÇø´ º¯¼ö¿¡ °ªÀ» ÇÒ´çÇÒ ¼ö ÀÖ½À´Ï´Ù.
index.tpl
<?php {var} = 123; ?>
<div>{var}</div>
>>output
<div>123</div>
php.ini ÆÄÀÏÀÇ ¼³Á¤¿¡ µû¶ó PHP ű׷Π<? ?> ¶Ç´Â <% %> µµ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.
Note:
À̰ÍÀº ±ÇÀåµÇ´Â ±â´ÉÀÌ ¾Æ´Ï¸ç, ÇÊ¿äÇÏ´Ù¸é °£´ÜÇÑ ¿ëµµ·Î¸¸ »ç¿ëÇϽñ⠹ٶø´Ï´Ù. PHP ÄÚµåÀÇ ¿À·ù¿¡ ´ëÇØ¼­´Â, ÅÛÇø´º¯È¯±â°¡ ÀÚüÀûÀÎ µð¹ö±ë ¸Þ¼¼Áö¸¦ Ãâ·ÂÇÏÁö ¸øÇÕ´Ï´Ù.
 
2003-03-03 ~