Организация объектов и библиотек - PullRequest
4 голосов
/ 16 сентября 2011

Я создавал небольшое количество библиотек / классов с нуля в php.Я пришел из фонового кода и пытаюсь создать несколько библиотек с похожей функциональностью.Я продолжаю сталкиваться с проблемами, связанными с объектами.

Это лучший способ как-то создать суперобъект $this?Моя основная проблема заключается в том, что я создал объект просмотра и запускаю функцию с именем load, которая выглядит следующим образом:

class View {

        public function __construct() {
        }

        public function load($file = NULL, $data = array()) {
                if($file) {
                        $file .= '.php';
                        if(file_exists($file)) {
                                // Extract variables BEFORE including the file
                                extract($data);
                                include $file;
                                return TRUE;
                        } else {
                                echo 'View not found';
                                return FALSE;
                        }
                } else {
                        return FALSE;
                }
        }
}

Затем в моем php-файле вверху есть include 'libraries.php';, которыйвыглядит так:

include 'database.php';
include 'view.php';
include 'input.php';
include 'form.php';

$config = array(
        'host' => 'localhost',
        'username' => 'username',
        'password' => 'password',
        'database' => 'database'
);

$database = new Database($config);
$view = new View();
$input = new Input();
$form = new Form();

Из файла, в который я включил библиотеки, я могу написать что-то вроде $form->value('name'); без ошибок.Однако, если я сделаю что-то вроде этого:

$view->load('folder/index', array('var_name' => 'var_value'));, тогда из файла folder/index.php я смогу получить доступ к $var_name просто отлично, но не к $form->value('name');.Я получаю ошибки, такие как Call to a member function value() on a non-object in ...

Мой вопрос заключается в том, как я могу организовать свои библиотеки и классы таким образом, чтобы их можно было многократно использовать.Я не хочу использовать фронтальный загрузчик (файл index.php, через который все сначала проходит).Это может быть проблемой с тем, как я писал свои уроки, но я думаю, что это более серьезная проблема в том, где что-то находится и т. Д.

1 Ответ

1 голос
/ 20 сентября 2011

Поместите файлы библиотеки / класса в общий каталог. Что-то вроде:

 www
 |_includes
 | |_classes
 | | |_view.php
 | |_config
 |   |_database.php
 |_other_folder
   |_index.php

Затем вы можете установить общий путь включения в вашем файле .htaccess для этого «включенного» каталога:

php_value include_path .:/path/to/www/includes

Тогда файлу other_folder / index.php просто нужно что-то вроде:

require_once('config/database.php');
require_once('classes/view.php');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...