PHP本机扩展

PHP本机扩展,php,php-extension,Php,Php Extension,我有一组类和方法,我希望在给定系统上的任何PHP使用都可以访问这些类和方法,并希望将其打包为一个扩展,即使它不是用C编写的。这些类和方法还打包为一个或两个具有SUID位集的shell脚本。不管文档的根目录是什么,类都需要访问这些文件 从我所读到的php.ini或.htaccess的auto_prepend选项似乎是唯一的选项。有更好的方法吗?如果我使用auto prepend(包括或需要一个我认为会导致auto prepend再次启动的文件),我会遇到重新声明问题吗?看看名称空间! 您可以将所有

我有一组类和方法,我希望在给定系统上的任何PHP使用都可以访问这些类和方法,并希望将其打包为一个扩展,即使它不是用C编写的。这些类和方法还打包为一个或两个具有
SUID
位集的shell脚本。不管文档的根目录是什么,类都需要访问这些文件

从我所读到的
php.ini
.htaccess
auto_prepend
选项似乎是唯一的选项。有更好的方法吗?如果我使用auto prepend(包括或需要一个我认为会导致auto prepend再次启动的文件),我会遇到重新声明问题吗?

看看名称空间! 您可以将所有类放在同一名称空间中,而不会干扰系统的其余部分


不要尝试构建扩展,如果您想打包您的库,请查看。

将您的类/文件放在服务器上的某个位置,并将
php.ini
include\u path
设置为也包括这些文件的位置。或者,如您所述,您可以使用
auto\u prepend\u file
来强制执行,但是如果您不使用名称空间,这是一个非常糟糕的想法。迟早你会遇到名字冲突。仍然不确定为什么不将所有对象转换为类并使用。

名称空间并不能真正解决当前的问题,即确保类和方法可用于整个系统的所有用途。它们无疑是编码方面的最佳实践,但与当前的问题并不真正相关。打包库肯定是我想做的事情,但我不想在任何地方都需要它。这段代码与其说是这个用例语言的扩展,不如说是我在服务器上的几个站点上使用我的框架。我确实会发布,但会在每个站点上放置一个符号链接,并且只“安装”一次库。名称空间确实起到了重要作用,请原谅我的无知,但据我所知,名称空间只是一种组织策略。他们是伟大的;我使用它们,但它们与在您拥有
include
require
之前可供您使用的方法/类无关。您是否使用某种魔法(我想自动加载得到了很好的实现)使代码可以使用它?当然,我的库中有一个自动加载程序,带有映射器,可以将名称空间映射到位置,并根据需要包含类。将其放入
include_路径
可以使用它,但它必须是
require
d或
include
d到每个文件中。这段代码或多或少是对该语言的一种补充,它的可用方式应该与实际扩展中的方法在没有额外include的情况下全局可用的方式相同。是的,这是正确的。尽管如此,强制使用
auto_prepend_文件
包含仍然会影响性能。这真的是你想要实现的吗?在需要时用手将其包括在内有什么问题?为什么不使用自动加载?Log4HP对自动加载很贪婪,并且有自己的自动加载程序,所以我不能在我的一些应用程序中使用它。我们可以将代码粘贴到
include_路径中,然后手动将其包含,这样就可以解决问题,但我们希望不会。不过,我很难证明这一点,所以也许我会重新评估我们试图完成的任务。我确实会在某些任务中使用auto_prepend脚本,但这只是因为如果(!function_存在
!defined(
包装器),则每个声明都会延迟。