2012-12-29 1 views
0

Я пытаюсь создать функцию, которая будет классы автозагрузки, так что я могу сделать что-то вроде этого:load_class Функция

load_class('Db'); 
$db->query(); 

Вот мой код до сих пор. Он загружает файл и успешно создает класс, но когда я пытаюсь вызвать метод, описанный выше, я получаю ошибку Call to member function.

Вот мой код:

function load_class($class) { 
    $file = 'classes/' . $class . '.php'; 

    if (file_exists($file)) { 
     include_once($file); 

     if (class_exists($class)) { 
      $class = new $class(); 
      return $class; 
     } 
    } 
} 

Что мне не хватает?

Спасибо!

+0

Что такое преимущество делает это так. Что не так с использованием 'new'? или если вы ненавидите 'new', создайте базовый класс со статическим методом' create' и сделайте все остальные классы унаследованы от него. –

ответ

0

load_class возвращение экземпляра Db класса, если он нашел декларацию.

Вам может понадобиться сделать:

$db = load_class('Db'); 
if (!$db) { 
    throw new Exception('Failed to load db!'); 
} 
$db->query(); 

Но, если вы хотите автозагрузку класс, когда вы делаете $db = new Db;, то вы должны взглянуть на php's autoload.

Пример:

function load_class($class) { 
    $file = 'classes/' . $class . '.php'; 
    if (file_exists($file)) { 
     include_once($file); 
    } 
} 
spl_autoload_register('load_class'); 
+0

Это исключение/обработка ошибок должна произойти внутри функции автозагрузки, не так ли? –

+0

@ ItayMoav-Malimovka Да, это, конечно, лучше. – xdazz

0

Для вашего кода, чтобы работать, сделайте это так:

$db = load_class('Db'); 
$db->query(); 
+0

Спасибо за ваш ответ, но если бы я это сделал, я бы просто использовал '$ db = new Db' - я пытаюсь создать функцию, которая будет делать это динамически, например, CodeIgniter. – user1453094

+0

«Волшебный» материал, подобный этому, ошибочен. 'load_class ('Db')' - 16 символов. '$ db = new Db' составляет 10-12 символов, поэтому вы даже не пишете меньше ... –

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

  • Нет связанных вопросов^_^