2010-05-07 4 views
0

Я хочу иметь класс, который включает в себя все файлы для меня.включают файлы в метод?

например.

Loader::loadZend // loads all zend libraries 
Loader::loadSymfony // loads all symfony components 

Если я включил файл в метод, станет ли это доступным в глобальном масштабе?

похоже, что он не работает.

Возможно, я сделал что-то не так, или есть обходной путь для этого?

благодаря

ответ

3

От http://uk.php.net/manual/en/function.include.php (курсив мой)

Когда файл включается, код содержит наследует переменную объем линии, на которой включают происходит. Любые переменные, доступные в этой строке в вызывающем файле , будут доступны в вызываемом файле с этой точки вперед. Однако все функции и классы, определенные во включенном файле , имеют глобальную область действия.

Имея загрузчик, который загружает все классы Zend, Symfony или что-то сразу это плохая идея. У обоих есть свой автозагрузчик, поэтому все, что вам нужно сделать, это сделать библиотеки доступными на пути включения, а затем spl_autoload_register собственный автозагрузчик.

+0

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

+0

@fayer, как сказано выше: если вы «включаете» файл, переменные в файле будут доступны только внутри вызывающей функции, тогда как функции и классы в файле будут доступны по всему миру. – Gordon

+0

ОК тогда ....то я думаю, я просто использую spl_autoload_register. Благодарю. –

1

Если вы просто включаете класс внутри другого класса, он доступен только в классе, в который вы вставили include.
Таким образом, решение заключается в создании автозагрузчика, который автоматически включает классы, необходимые для демонстрантов. Здесь у вас есть информация вам нужно:

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

Это является основным для программирования PHP5 ООП.

EDIT

Увидев запрос о файле. Ни. Файл (который будет обрабатываться через php-функции) будет доступен только внутри функции, в которой он вызывается/используется, а не глобально во всем приложении/веб-сайте.

+0

yeah im using spl_autoload, но им интересно узнать, будет ли эта функция работать внутри метода. и если я не использую autoload, просто регулярный include, будет ли доступный файл из метода доступен для всего кода в глобальной области? –

+0

Регулярный включите, это затронет только класс, в который он включен. Гордон прибил его. – Dez

2

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

Например,

a.php: 

<?php 
$a = "global a"; 
class c { 
    public $b = "member b"; 
} 
?> 

b.php 

<?php 
function inc() { 
include 'a.php'; 
} 

inc(); 

echo $a; 

$class = new c; 
echo $class->b; 
?> 

Если вы запустите b.php, вы обнаружите $ а пошел и класс с или любая функция будет по-прежнему доступна.

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