2015-06-20 4 views
1

Привет, поэтому я недавно изучил PHP и задавался вопросом, как я должен связывать разные страницы, чтобы всегда хорошо работать и создавать как можно меньше несоответствий.Каков правильный способ связывания php-страниц?

В моем коде я использую либо это:

include 'newcomment.php'; 
include 'menu.php'; 

или я использую этот тип:

include '../MiniPost/database.php'; 
include '../MiniPost/newtopic.php'; 

я уверен, что они оба не являются оптимальными. С первым хуже, поскольку он заставляет меня поместить все мои php в одну папку. Я не помню, как я начал использовать второй. Думаю, я видел его где-то на Stackoverflow .. означает root? Несколько раз у меня были проблемы, где я, например, писал ../MiniPost/Forum/Forum.php, и он продолжал давать мне ошибки, есть ли у него что-нибудь, чтобы сделать так, как я ссылаюсь на страницы? Что вы используете для ссылок на страницы, и вы чувствуете, что это хорошая практика?

ответ

0

Оба способа правильные. Первый файл находится на том же уровне (папке), а второй вариант, который вы поднимаете вверх и начинаете оттуда.

Например, у вас есть эта структура.

class/ 
class/myClass.php 
category/ 
category/index.php 

Если вам необходимо включить myClass.php от index.php, вам нужно подняться на один уровень и перейти в папку класса и вызовите файл.

В этом случае

Include('../class/myClass.php'); 
3

.. означает папку вверх из текущей папки. . означает текущую папку.

Вы можете работать с файлом в подкаталоге ...

$file = "lib/test.php";

... или в верхней директории ...

$file = "../test.php";

... или все из них:

$file = "../lib/test.php";

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

$file = dirname(__FILE__) . "/lib/test.php";

- или, короче, -

$file = __DIR__ . "/lib/test.php";

+0

Всегда следует указывать пути относительно текущего файла с помощью '__FILE__' или' __DIR__', чтобы убедиться, что они будут разрешены к тому же файлу, независимо от того, где запущена цепочка include/require. –

+0

@ogondza: Да, эта цепочка является проблемой :-) Да, '__DIR__' проще. Я добавлю. – Richard

1

Предлагаю определить константу как site_root.

Вы можете добавить это в ваш index.php:

define('SITE_ROOT', realpath(dirname(__FILE__))); 

И тогда, возможно, добавить очень простой автозагрузчика:

<?php 
function __autoload($class_name) { 
    include SITE_ROOT . '/src/' . $class_name . '.php'; 
} 
?> 

автозагрузчик позволяет работать без include операторов в коде.

Просто экземпляр класса: <?php $object = new Test;?>

Файл загружен затем SITE_ROOT.'/src/Test.php'.

Это останавливает распространение включений/требований во всем коде.

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