2016-01-26 103 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}。我亲自去了第一个选项,但如果你有一个自动加载器并且遇到同样的问题,至少你有选择。

相关问题