2016-01-26 4 views
-1

Я создаю сайт для клиента, и он хочет иметь калькулятор для клиентов, чтобы рассчитать их ежемесячную премию, когда они хотят арендовать автомобиль. Этот калькулятор появляется в трех разных местах на веб-сайте, поэтому я решил построить его один раз, затем include() файл в основной файл. Например:Почему я должен повторно объявлять свои классы во включенном файле?

case 'calculator': 
    case 'bereken-leasebedrag': 
     include('calculator.php'); 
     break; 

Однако, у меня есть несколько классов, определенных в главном файле:

use site\database\Vote; 
use site\database\Vehicle; 
use site\database\VehicleType; 

use site\utils\ApiConnect; 
use site\utils\Calculator; 

и некоторые другие.

Некоторые из этих классов используются в файле калькулятора, таком как калькулятор и транспортное средство, и некоторые другие. Эти классы определены в основном файле, но не передаются в файл калькулятора, тогда как переменные, такие как $ _SESSION, $ _POST и даже мои собственные определенные переменные, такие как $ car и $ calc, доступны во включенном файле.

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

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

Я ужасно объясняю вещи, поэтому, если мне нужно что-то уточнить, я был бы более чем счастлив.

+0

У вас есть автозагрузчик, зарегистрированный на PHP? – divix

+0

@divix Да, наш шаблон содержит файл bootstrap.inc.php и содержит автозагрузчик. Я понятия не имею, как это работает, но я не знаком с PHP – Sean

+0

Пожалуйста, покажите больше кода. То, что вы показываете, не имеет ничего общего с включением файла или автозагрузкой, вы просто показываете какое-то псевдонимы пространства имен. – deceze

ответ

0

Благодаря deceze, я узнал, что use используется для псевдонимов, что-то, что я не получал от своих поисковых запросов в Google.

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

Короче говоря, я должен был либо применить сглаживание в прилагаемом файле, так что я мог бы просто сказать new Calculator(), или удалить ступенчатость и изменить каждый new {CLASS}() к new \{PATH}\{TO}\{CLASS}. Я лично пошел с первым вариантом, но если у вас есть автозагрузчик и вы работаете в этой же проблеме, по крайней мере, у вас есть выбор.

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