Лучший способ включить файлы [php] - PullRequest
1 голос
/ 03 ноября 2010

Допустим, у меня есть четыре PHP-файла:

www / global.php

<?php 
function doAwesomeStuff() {}

www / child1.php

<?php
include ("global.php");
function Something1() {}

www / child2.php

<?php
include ("global.php");
function Something2() {}

www / подкаталог / grandchild.php

<?php
include ("../global.php");
include ("../child2.php");
function Something3() {}

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

Есть какие-нибудь решения для этого?

Ответы [ 7 ]

5 голосов
/ 03 ноября 2010

Лично я бы сказал, что лучше отслеживать зависимости или иметь центральные включаемые файлы, но в случае неудачи всегда есть include_once().

Примечание: include_once() и require_once() намного медленнее, чем обычные include() и require().

3 голосов
/ 03 ноября 2010

В grandchild.php, сделайте это:

set_include_path("..");
require_once("global.php");
require_once("child2.php");

И во всех других файлах также лучше заменить include на require_once, чтобы избежать продолжения после невозможности включить файл («require») и избежать многократного включения файла ( "один раз").

1 голос
/ 03 ноября 2010

Посмотрите на require_once , таким образом файл включен только , если он не был включен ранее.

0 голосов
/ 03 ноября 2010

В дополнение к части require_once вы, вероятно, можете немного улучшить свой код, используя __plaboad php магический метод в центральном конфигурационном файле.

0 голосов
/ 03 ноября 2010

Как уже упоминалось, require_once 'includes.php' будет выполнять работу RE, включая слишком много.

Я поэкспериментировал с использованием getcwd () для возврата пути, чтобы помочь с тем, что вам нужно включить, но янет ничего конкретного, чтобы показать вам, к сожалению.

0 голосов
/ 03 ноября 2010

Я думаю, что вы ищете require_once

0 голосов
/ 03 ноября 2010

Вы можете использовать require_once () .Конечно, лучше сделать полную зависимость файлов.Но require_once проверит, «был ли файл уже включен, и если да, не включать (требовать) его снова».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...