有很多内置PHP函数。我想知道,在做了将近两年半的软件工程师之后,我几乎没有用到其中的一小部分。但是它们都是定义的,可以与默认的PHP安装一起使用。
我在某个地方读过,PHP提供了所有这些内置的东西,但是使用JAVA这样的语言做类似的事情需要大量的编码。对吗?我在其他语言方面经验不多。
另外,我是否正确地假设,这些函数中的很大一部分不被任何其他内置函数或任何东西(内部依赖关系)所使用?例如,这些函数表()、gzopen()仅在PDF和gzip文件相关的情况下才需要。
如果是这样的话,那么作为高级程序员,PHP是否为我们提供了基于特定项目需求或更动态地基于特定模块有选择地加载它们的选项?例如,只有当我有PDF相关的任务时,才加载PDF相关功能。如果可能的话,在哪一级可以这样做呢?如果在PHP安装级别,那么我认为在共享主机的情况下是不可能的。有可能找到更好的解决办法吗?
我只是从常识的角度讲,我们包括包含有需要的功能的文件。
这会提升你的表现吗?
我不太了解PHP的核心库等。所以,请放点光。
更新:
谢谢你的回答
@pygorex1 1- HipHop方法是对整个PHP进行优化。因此,简单地说,如果我是对的,如果在使用HipHop之前运行1秒,它可能会达到0.7秒。但是在这两种情况下,这些额外的不必要的定义函数的存在都会增加它们的开销(比如,第一种情况是0.1秒,HipHop是0.07秒)。如果是这样的话,那么HipHop就会针对其他的目标而不回答我的问题。但是,你给出的另外两点说,所有的事情都必须在编译过程中完成。因此,这可能意味着,如果我使用扩展进行编译,那么每次都会加载它下面的函数组。那么,可能没有进一步的方法来删除包含?任何一种旅行?
@泰勒-我同意这可能是很难做到我的要求,但原因不是你说的。找出依赖项并不是那么困难。应用常识,我可以说,is_numeric()、is_array()、array_walk()、func_get_args()等函数是非常基本的函数,可能被许多人调用,但也有很容易区分的组,例如包含socket_connect()的套接字函数组,如果不明确需要,就不需要包含它们。问题可能是在编译时需要指定它,就像pygorex1回答的那样。
发布于 2010-12-15 09:55:29
有dl()在运行时加载一个PHP扩展。
动态加载扩展的示例:
if (!extension_loaded('sqlite')) {
$prefix = (PHP_SHLIB_SUFFIX === 'dll') ? 'php_' : '';
dl($prefix . 'sqlite.' . PHP_SHLIB_SUFFIX);
}发布于 2010-12-13 21:45:42
关于任何潜在的性能提升,除非您为大量动态PHP页面服务,否则您可能不会注意到它。这条路以前就走过--看看HipHop吧,它是Facebook优化PHP到C++的工具。使用APC和eAccelerator等字节代码缓存和/或重写PHP代码,智能地使用memcached缓存将大大提高PHP性能,而不是启用/禁用特定的PHP函数。
尽管如此,有两种减少PHP可用函数数量的主要方法:
PHP编译时选项
从源代码编译PHP时可用。问题gzopen()中提到的函数之一是zlib扩展的一部分,必须是在编译时启用。有很多内置编译时选项。
PHP模块
这些文件由PHP动态加载,并由扩展名下的php.ini配置文件控制--它们是.dll文件在Windows上或.so文件在Linux上。我的开发php.ini的一个片段:
...
extension=php_bz2.dll
;extension=php_curl.dll
;extension=php_dba.dll
;extension=php_dblib.dll
extension=php_mbstring.dll
extension=php_exif.dll
extension=php_fileinfo.dll
extension=php_gd2.dll
...发布于 2010-12-13 21:20:43
php函数命名空间崩溃就是,嗯,正是如此。
不,没有办法在运行时有选择地加载它们。你不叫什么,并不意味着你不叫它。
https://stackoverflow.com/questions/4433567
复制相似问题