Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/293.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_Performance_Php Internals - Fatal编程技术网

PHP在调用函数之前读取函数吗?

PHP在调用函数之前读取函数吗?,php,performance,php-internals,Php,Performance,Php Internals,我声明了100个函数,但实际上我没有调用其中任何一个。定义这么多函数会影响加载时间吗 PHP在调用这些函数之前是否处理它们?是的,PHP在运行时解析所有函数,并检查可能的语法错误(尽管它不会一直执行这些函数),并将它们的名称注册为符号调用任何函数时,php会在注册符号表中搜索函数名,然后执行该函数。 因此,最好只使用您需要的函数,因为它会增加符号表的大小。简单地说,即使有数百个未使用的类和函数,也不会对程序的性能产生太大影响。有些不同,是的,也许,但不多。改进正在运行的代码将产生更大的不同。在您

我声明了100个函数,但实际上我没有调用其中任何一个。定义这么多函数会影响加载时间吗


PHP在调用这些函数之前是否处理它们?

是的,PHP在运行时解析所有函数,并检查可能的语法错误(尽管它不会一直执行这些函数),并将它们的名称注册为符号
调用任何函数时,php会在注册符号表中搜索函数名,然后执行该函数。

因此,最好只使用您需要的函数,因为它会增加符号表的大小。

简单地说,即使有数百个未使用的类和函数,也不会对程序的性能产生太大影响。有些不同,是的,也许,但不多。改进正在运行的代码将产生更大的不同。在您拥有自己的完美代码之前,不要担心优化语言机制。性能优化的关键是首先解决最大的问题,而最大的问题很少是由微妙的语言怪癖引起的

如果您确实希望最小化加载太多不需要使用的代码的影响,那么最好的方法就是使用PHP的自动加载机制

这可能意味着您也应该将代码作为类而不是独立函数编写,但无论如何,这是一件好事

使用自动加载程序意味着您可以让PHP在需要时加载所需的代码。如果不使用特定的类,则不会加载该类,但另一方面,它会在需要时出现,而无需执行
include()
或类似操作

这种设置非常强大,消除了对加载太多代码的担忧,即使您使用的是大型框架库


自动加载对于我来说是一个太大的话题,我无法在这里的答案中详细解释,但是网络上有大量的资源来教授它。或者,使用现有的框架——几乎所有框架都内置了自动加载系统,因此,如果您使用的是任何一种现代PHP框架,您应该能够使用它们。

如果您想了解有关PHP执行的更多信息,您可能会感兴趣。每种语言都必须处理源文件的语法/语法。是的,PHP也会这样做。但是如果你不调用这些函数,什么都不会发生。解析和语法检查非常快。如果你在追求一些愚蠢的优化动作——不要这样做,这对你没有帮助。
对于计算机来说速度慢的东西对我们来说往往足够快
——你可以肯定这是一个聪明的开发人员;php做了很多不必要的工作,我们没有注意到。在软件体系结构方面,您应该始终尝试编写尽可能干净、清晰的代码,这在大多数情况下并不意味着对计算机来说是最快的方式。如果一切正常,优化就是你要做的事情。我注意到,当你包含可能不使用的大型库时,比如web请求的内存会膨胀。自动加载和操作码缓存在这里可能会有所帮助。文件系统扫描和访问会降低应用程序的速度。一个单文件应用程序可能会更高效,即使它确实占用了更多内存。自动加载意味着额外的文件系统操作。我可以说这会减慢你的系统。尽管如此,使用自动加载始终是一个好主意,但在这个问题的范围内,我不同意您的意见。@giorgio-当然在这个问题的范围内,它将取决于将要加载多少代码?如果我们每次只使用100个类中的一个或两个(这是我从问题中得到的暗示),那么与每次加载全部类相比,自动加载肯定还是一个节省。@giorgio如果您使用正确配置的opcache,那么自动加载不会导致额外的文件系统操作。@NikiC yeah当然,如果你买一台更强大的服务器,那根本没关系。。。但这在这里没用,是吗?我们只是讨论解析器对类/文件的基本功能,而没有对服务器堆栈进行相对复杂的改进,比如使用自动加载程序,这对您毫无帮助。需要注意的是,如果您使用opcache扩展(就像任何专业的PHP部署一样),然后文件只编译一次,而不是每次执行。因此,编译函数没有开销。唯一的开销是在运行时绑定它们。这对于函数来说不是问题,但对于类来说可能是问题(如果在运行时绑定了1000个未使用的类)