2012-02-24 5 views
3

У меня есть класс «поиск», который используется только при определенных обстоятельствах. Решение о необходимости «поиска» или нет в «странице» класса в функции «setupPage». Все в порядке (хорошо ли это кодирование), чтобы включить класс в другой класс?Включая класс в другой класс в php

class Page { 
    private function setupPage($page_id){ 
     switch($page_id){ 
      case 1: 
      // do something 
      break; 

      case 2: 
      include_once('class_search.php'); 
      // class search is singleton 
      $this->search = Search::getInstance(); 
      // now I can use functions of 'search' 
      $this->search->someSearchFunction(); 
     } 
    } 
} 

ответ

2

абсолютно нормально это сделать, но у вас есть и другая альтернатива. вам может потребоваться функция автозагрузки php

function __autoload($class_name) { 
    include $class_name . '.php'; 
} 

всякий раз, когда вы создаете новый класс. PHP автоматически вызывает функцию __autoload с одним аргументом i.e именем класса. Рассмотрим следующий пример

$user = new User():

при создании экземпляра объекта пользователя здесь функция автозагрузку называется, он пытается включить файл из того же каталога. (со ссылкой на вышеприведенную функцию автозагрузки). теперь вы можете реализовать свою собственную логику для автозагрузки классов. независимо от того, в каком каталоге он находится. для получения дополнительной информации ознакомьтесь с этой ссылкой http://in.php.net/autoload.

2

Я бы этого не сделал. Если вы хотите, чтобы ваши классы загружались только, если они нужны, я предлагаю вам использовать автозагрузку PHP для этого. Here is the Documentation.

+1

Хотя нет ничего плохого в ручном загрузке класса, я согласен с тем, что автозагрузка будет способом. Это, по сути, одно и то же, оно просто выглядит лучше, потому что подразумевается включение. Это также дает вам более согласованную загрузку, поскольку изменение функции упрощает работу, чем изменение всех экземпляров 'include()' в случае изменения пути. – Crashspeeder

0

Это не должно быть проблемой, если вы используете autoloading, это произойдет именно так.