类声明的范围

时间:2010-07-31 16:25:35

标签: php class scope declaration

我有一个文件classes.php,其中我声明了一组要在一系列页面中使用的类。 然后,在一个页面中,我需要使用另一个类,它在一个单独的文件中声明。现在,这个单独的类使用位于classes.php文件中的一些类。

所以,在大多数页面中,我有:

[1]
<?php
require('classes.php');
[page code]
?>

工作正常。问题出在该特定页面上,其中包含:

[2]
<?php
require('classes.php');
require('separate_class.php');
[page code]
?>

这不起作用,因为separate_class.php也需要classes.php

如果我试试这个:

[3]
<?php
require('separate_class.php');
[page code]
?>

然后它不起作用,因为现在这些类不适用于此页面,即使它们是在separate_class.php文件中声明的。

显而易见的解决方案似乎是在classes.php文件中包含单独的类,这是笨拙的,因为这个单独的类仅在这一系列页面中有意义,而文件classes.php包含一般目标类,并在各种应用程序之间共享。

我怎么能以允许我保持[2]中所示结构的方式来实现它,也就是说,将通用类与特定类分开,而这些类又需要那些通用类,而仍然可以在页面中使用这些通用类吗?

2 个答案:

答案 0 :(得分:5)

更合理的解决方案可能是将每个类分成自己的文件并使用自动加载器......

http://php.net/manual/en/function.spl-autoload.php

答案 1 :(得分:4)

您想使用require_once()

编辑:如果您正在尝试这样做,则无法重新声明课程。我不知道你的代码是什么样的,但也许inheritance正是你要找的?

编辑2:当我在separate_class.php中有require 'classes.php'并且在你实际打开的脚本中需要'classes.php'时,我才能重现你的错误。所以你有两个选择:

  • 在您需要separate_class.php之前,不要在脚本中require(或require_once)classes.php
  • 在任何地方使用require_once (检查separate_class.php),不要担心是否需要文件。