类声明的范围

Pan*_*ssa 3 php scope class declaration

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

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

[1]
<?php
require('classes.php');
[page code]
?>
Run Code Online (Sandbox Code Playgroud)

哪个工作正常.该特定页面出现问题,该页面具有:

[2]
<?php
require('classes.php');
require('separate_class.php');
[page code]
?>
Run Code Online (Sandbox Code Playgroud)

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

如果我试试这个:

[3]
<?php
require('separate_class.php');
[page code]
?>
Run Code Online (Sandbox Code Playgroud)

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

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

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

qua*_*oup 5

你要使用require_once ()

编辑:如果这是你想要做的,你不能重新声明一个类。我不知道你的代码是什么样的,但也许继承是你正在寻找的?

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

  • 在你需要separate_class.php 之前,不要require(或require_once)在你的脚本中使用classes.php
  • 到处都使用 require_once (检查separate_class.php),不用担心是否需要文件。


Pet*_*han 5

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

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