2015-11-30 3 views
0

У меня проблема с php и OOP.
Я попытался создать объект и внутри объекта, который пытался загрузить данные из mysql.Include_once в Object dont work

Мои файлы построены следующим образом.
HTML
| _ PHP
| __ объекты
| _ содержание

В папке объектов является объектный файл "Событие". Объект, созданный в скрипте в папке php, и весь скрипт вызывается из html-файла в содержимом.

Моя проблема в том, что я использую объект из разных мест. И метод include_once не будет работать.

event.php:

<?php 
include_once(ROOT.'php/db.inc.php'); 

class Pb1_event 
{ 
    public $ev1_id; 
    // do something 
} 

Я также пробовал с include_once ('./../ db.inc.php') ;. Как включить его? Это хороший способ включить его в этот файл или включить его в другое место?

+0

Что такое точная ошибка, которую вы получаете –

+0

Извините: Предупреждение: include_once (/php/db.inc.php): не удалось открыть поток: нет такого файла или каталога в/var/www/html/php /objects/Pb1_event.php в строке 9 – Dominik

ответ

1

Во-первых, что я хотел бы сделать, это использовать либо __DIR__, или лучше $_SERVER['DOCUMENT_ROOT'] для абсолютного Pathing , Это константы, которые будут ссылаться на ваш серверный корневой сервер. Предполагая, что это относится к корневой директории, которую вы дали нам, вы могли бы сделать:

require_once $_SERVER['DOCUMENT_ROOT'] . '/php/db.inc.php';

Но, чтобы получить лучшее понимание, вы должны echo его и посмотреть, как ваши пути каталогов. Кроме того, для «лучших практики», вы должны использовать автозагрузку, вы можете прочитать об этом здесь:

http://php.net/manual/en/language.oop5.autoload.php

Определите функцию автозагрузки и его называют файл вам нужно, например, если вам нужен класс называется DB вашей функции может выглядеть примерно так:

function __autoload($class) { 
    if ($class == 'DB') { 
     require_once $_SERVER['DOCUMENT_ROOT'] . '/php/db.inc.php'; 
    } 
} 
1

Использование __FILE__ или __DIR__ магические константы:

include_once(dirname(__FILE__) . '/../db.inc.php'); 
include_once(__DIR__ . '/../db.inc.php'); 
+0

, что было легко, спасибо! – Dominik

0

вы можете попробовать это для предупреждения:

include_once($_SERVER["DOCUMENT_ROOT"].'/php/db.inc.php'); 
1

Мое предложение было бы зарегистрировать автозагрузчик в начале ваших скриптов с помощью spl_autoload_register():

spl_autoload_register(function ($className) { 
    include 'path/to/php/objects/' . $className . '.php'; 
}); 

Если вы хотите создать объект, где бы вы ни находились, вы просто должны сделать:

$myclass = new MyClass(); 

автозагрузчик загрузит правильный класс. Все, о чем вам нужно подумать, это вызвать файлы в «объектах» так же, как и ваши классы. Пример:

class Pb1_event { 
} 

filename: путь/to/php/objects/Pb1_event.php