2012-06-25 2 views
2

У меня есть общий класс, который мне нравится, чтобы он был расширен другими классами.PHP класс, расширяющий другой класс за пределами папки

У меня есть каталог создан с папками и файлами классов внутри этих папок, например

Классы/пользователи/users.class.php классов/общие/general.class.php

У меня есть класс пользователей, расширяющий общий класс, но поскольку они находятся в разных папках, я думаю, что общий класс не найден.

пользователей класса расширяет генеральный {

}

Может кто-то пожалуйста, помогите мне выяснить это.

Я должен также упомянуть, я использую функцию autload

+1

попытаться добавить «include» ../general/general.class.php ';; – alfasin

+0

Причина, по которой я хочу использовать расширение, заключается в использовании вызова $ this-> в моем классе пользователей, который исходит из общего – Yeak

+0

. Я не понимаю ваш комментарий. Чтобы использовать класс «общий», вам нужно загрузить файл. – alfasin

ответ

8

Когда у вас нет автозагрузчика, то перед тем включают класс.

Тогда класс известен, и вы можете его использовать.

require_once(__DIR__.'/../general/general.class.php'); 
+0

У меня есть автозагрузчик. – Yeak

3

Вам необходимо убедиться, что вы загружаете оба класса или любой другой класс, который требуется. Например:

В вашем загрузчике ...:

// Set up the include path so that we can easily access the class files 
set_include_path('/absolute/path/to/classes'. PATH_SEPARATOR . get_include_path()); 
require_once('users/users.class.php'); 

В users.class.php:

require_once('general/general.class.php'); 
class User { 
    // you class definition 
} 

Насколько получают абсолютный путь к папке классов, вы будете хотите настройте это на основе вашего места начальной загрузки. Например:

// bootstrap lives in $_SERVER['DOCUMENT_ROOT'] and classes is one level up outside the doc root 
// this code is in the bootstrap... 
$path = realpath(dirname(__FILE__).'/../classes'); 
set_include_path($path . PATH_SEPARATOR . get_include_path()); 
+0

Я определенно рекомендую использовать 'set_include_path'. –

+0

, поэтому единственный способ сделать это - использовать? – Yeak

+0

Ну да, в какой-то момент вы всегда будете «требовать». Теперь вы можете (и я бы рекомендовал) создать или использовать существующий автозагрузчик, например [Symfony's] (http://symfony.com/doc/current/components/class_loader.html) или [Zend's] (http: // framework. zend.com/manual/en/zend.loader.autoloader.html), но внутренне он просто собирается отобразить имя класса в файл и затем потребовать его. – prodigitalson

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