2012-01-11 3 views
0

Может кто-нибудь помочь мне упростить этот код? Есть ли способ, которым я могу навсегда передать $ the_campus в is_campus() без использования глобальной области? $ the_campus вытаскивает из базы данных, и значение изменяется, но переменная всегда называется $ the_campus.Постоянная передача переменной в функцию

Спасибо!

$the_campus = $search_term['campus']; 
    function is_campus($the_campus, $selected_campus) { 
     if ($selected_campus == $the_campus) { 
      echo 'selected'; 
     } 
    } 

    <?php is_campus($the_campus, 'university-of-minnesota-tc'); ?> 
    <?php is_campus($the_campus, 'university-of-wisconsin'); ?> 
    <?php is_campus($the_campus, 'university-of-chicago'); ?> 
+0

Есть ли конкретная причина, по которой вы не хотите использовать глобальную область видимости? Это почти единственный способ, которым это возможно. – Ryan

ответ

5

Вы могли бы изобрести способ передачи переменной без явного написания global в функции, но, пожалуйста, не. Функция просто прекрасна, как есть; введение «невидимой» связи с переменной собирается сделать ваш код хуже, не лучше.

Что вы бы вероятно, хотите сделать это реорганизовать код так, что он работает в эквивалентной форме, но более прост в использовании, например:

function echo_campus_string($the_campus, array $campuses) { 
    foreach($campuses as $campus) { 
     if($campus == $the_campus) { 
      echo 'selected'; // you will probably want to make the output more involved 
      // perhaps break as well? 
     } 
    } 
} 

<?php echo_campus_string($the_campus, array('university-of-minnesota-tc', '...', '...')); ?> 
+0

Мне очень нравится этот подход. Именно то, что я искал. – coryetzkorn

0

Пока я не в конечном итоге рекомендовать :

class CCampushelper { 

    // will be found by reference 
    protected $campus; 

    public 
    function bindVariable(&$externalCampus) { 

    $this->campus =& $externalCampus; 

    } 

    public 
    function is_campus($selected_campus) { 

    if ($selected_campus === $this->campus) { 
     echo 'selected'; 
    } 

    } 

} 

Зов это где-то в начале:

$helper = new CCampushelper(); 
$helper->bindVariable($campuses); 

И далее:

<?php $helper->is_campus('university-of-minnesota-tc'); ?> 
<?php $helper->is_campus('university-of-wisconsin'); ?> 
<?php $helper->is_campus('university-of-chicago'); ?> 
+0

Мне тоже нравится этот подход, но я не думаю, что собираюсь создать целый объект, потому что я использую его только один или два раза. – coryetzkorn

+0

Thx! По крайней мере, этот подход, как использовать контрольные переменные. – SteAp

+0

Да! Спасибо за помощь! – coryetzkorn

Смежные вопросы