Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 一个文件中的动态类定义_Php - Fatal编程技术网

Php 一个文件中的动态类定义

Php 一个文件中的动态类定义,php,Php,我只能有一个php文件 我只需要在某些情况下定义一个类来生成输出 大概是这样的: if (date("j") == "1") { echo "Not today"; exit; } new OutputGenerator(); class OutputGenerator { // very large definition (~3500 lines) } 这段代码的问题是PHP处理整个文件,这使得脚本非常慢。没有类声明,我每秒可以处理约500个请求。根据定义(即使我

我只能有一个php文件

我只需要在某些情况下定义一个类来生成输出

大概是这样的:

if (date("j") == "1") {
    echo "Not today";
    exit;
}

new OutputGenerator();

class OutputGenerator {
    // very large definition (~3500 lines)
}
这段代码的问题是PHP处理整个文件,这使得脚本非常慢。没有类声明,我每秒可以处理约500个请求。根据定义(即使我在定义之前退出),我只得到~50,这是90%的性能下降

有条件地要求外部文件声明可以解决我的问题,但我需要留在这个文件中


有没有办法(除了使用eval()或需要具有该定义的外部文件)做到这一点?

解析php文件的时间不应该太长。。我认为问题在于OutputGenerator的构造函数中正在进行一些昂贵的操作

您可以有条件地创建OutputGenerator的一个实例来规避此开销

 if($iNeedAnOutputGenerator){
      $og = new OutputGenerator();
 }

php文件的解析时间应该不会花那么长。。我认为问题在于OutputGenerator的构造函数中正在进行一些昂贵的操作

您可以有条件地创建OutputGenerator的一个实例来规避此开销

 if($iNeedAnOutputGenerator){
      $og = new OutputGenerator();
 }

由于您的脚本非常小,我同意您的想法,即您的性能可能会显著降低。您正在做的任何事情都不是资源密集型的,因此我可以看到,在这种情况下,大型类定义可能会显示出明显的差异

如果解析是个问题,最明显的答案是使用操作码缓存。在PHP5.5中,这是内置的,但是对于之前的任何PHP版本,都应该使用


即使没有APC,我认为对于这样一个简单的脚本,每秒50个请求的速度也很低,而且您可能会在某个地方遇到完全不同的瓶颈。

由于您的脚本非常小,我相信您的性能会显著降低。您正在做的任何事情都不是资源密集型的,因此我可以看到,在这种情况下,大型类定义可能会显示出明显的差异

如果解析是个问题,最明显的答案是使用操作码缓存。在PHP5.5中,这是内置的,但是对于之前的任何PHP版本,都应该使用


即使没有APC,我认为对于这样一个简单的脚本,每秒50个请求也是很低的,您可能在某个地方遇到了一个完全不同的瓶颈。

如果您对文件的其余部分使用
else
语句,会有帮助吗?您能否确认是类定义而不是其构造导致了性能下降?更大的问题是,类的实例化没有分配给我认为所有的事情都是在构造函数中完成的,因为没有参数,所以可能所有的事情都使用全局函数。问题是,即使没有初始化类,性能也会下降。该类只是位于文件的末尾(它实际上是一个LESS>CSS解析器),从未调用,从未实例化,只在同一个文件中。当我从外部文件中请求它时,性能将恢复到每秒约500个请求。我相信这是PHP内部的事情,它会将所有类读入内存,并在以后使它们可用。如果对文件的其余部分使用
else
语句,会有帮助吗?能否确认是类定义而不是其构造导致性能下降?更大的问题是,类的实例化没有分配给我认为所有的事情都是在构造函数中完成的,因为没有参数,所以可能所有的事情都使用全局函数。问题是,即使没有初始化类,性能也会下降。该类只是位于文件的末尾(它实际上是一个LESS>CSS解析器),从未调用,从未实例化,只在同一个文件中。当我从外部文件中请求它时,性能将恢复到每秒约500个请求。我相信这是PHP内部的事情,它将所有的类读入内存,然后使它们可用。类内的操作不是问题。即使我从未调用/实例化该类,也会发生这种情况。那么条件包含是唯一的方法。。。除非你想做一些疯狂的事情,比如把定义放在一个字符串中,然后有条件地对它求值。。。但这太疯狂了,我认为对于一个包含3500 loc的类定义,您可能需要重新评估您的解决方案。我同意,但是这个类不是我的代码,我只是使用它。无论如何谢谢你的帮助,我会继续尝试,稍后会发布一些结束语。课堂内的操作不是问题。即使我从未调用/实例化该类,也会发生这种情况。那么条件包含是唯一的方法。。。除非你想做一些疯狂的事情,比如把定义放在一个字符串中,然后有条件地对它求值。。。但这太疯狂了,我认为对于一个包含3500 loc的类定义,您可能需要重新评估您的解决方案。我同意,但是这个类不是我的代码,我只是使用它。无论如何谢谢你的帮助,我会继续尝试,并在稍后发布一些结论。