【问题标题】:PHP extension vs. library (and can it be converted)PHP 扩展与库(可以转换)
【发布时间】:2011-02-11 01:41:59
【问题描述】:

一些 php wamp/lamp 软件包附带 php 扩展,如 php_amf、php_db、php_gd2,我只需要激活扩展,或者如果默认情况下没有安装扩展。

我的一般问题是,这些扩展与库有何不同? 具体来说,我想知道,可以将扩展转换为加载到项目本身中的库吗?目标是在没有特殊安装(如 php 扩展需要)的情况下调用库。有时,当您使用共享主机时,您没有足够的权限来安装新的扩展程序。

【问题讨论】:

标签: php libraries php-extension


【解决方案1】:

PHP 扩展是一个 C 或 C++ 程序,包裹在 Zend 引擎中,在 PHP 安装中提供 PHP 函数和类。

PHP 库是用原生 PHP 编码的程序,它可能使用也可能不使用扩展来在 PHP 程序中提供函数和类。

虽然将 PHP 库转换为扩展是可能且相当容易的(假设您有足够的 C++ 知识),但相反的过程可能是一个乏味的过程,因为 C++ 程序可能使用 PHP 中不可用的函数和对象.

将 PHP 库转换为扩展更容易,因为显然 PHP 函数在 C 中都可用,无论以哪种方式,因为 PHP 是用 C 编码的。然而,相反的情况并非总是如此。

【讨论】:

  • +1 但我想知道更多关于将扩展转换为库的问题。你有具体的 cmets 吗?
  • 但是我认为PHP是图灵完备的语言,也就是说用C(或任何语言)做过的任何事情,PHP也可以做
  • @sami:我没有说 PHP 做不到,我说它很乏味。例如,在 C++ 中,您有类之间的友谊、多重继承、常量参数和返回值的概念,而 PHP 目前没有这些概念。可以模拟这样的事情,但并不像重命名函数或更改一些参数那么容易。其中一些更改需要更改程序设计。另一方面,C++ 语言支持几乎所有 PHP 语言特性。
【解决方案2】:

PHP 扩展是用另一种语言(通常是 C 或 C++)编写的,并扩展了 PHP 以允许它做一些 PHP 在实践中无法做到的事情。例如,与 PHP 内置函数尚不支持的操作系统或 Web 服务器的直接交互。扩展还允许从 PHP 重用用其他语言编写的现有代码;尽管理论上可以用 PHP 重写该库,但这样做通常是不切实际的,并且重用代码可以更轻松地提供更多功能,并且允许将来对代码的更新不费吹灰之力。

PHP 库只是 PHP 代码的共享集合,因此尽管它允许多个开发人员重复使用代码,但它不能让您做任何您无法(理论上)编写 PHP 代码的事情自己。

就将扩展转换为库而言:这取决于扩展的功能。如果可以使用原始 PHP 完成,那么您可以转换它,但这几乎是对功能的完全重写。它也可能使代码变慢。

【讨论】:

  • 否决我的人愿意解释我错在哪里吗?
  • @Tim:我没有投反对票,但我的猜测是“能够做一些 PHP 做不到的事情”的评论是错误的——任何扩展都可以做 PHP 可以做。只是作为扩展,事情会显着更好地执行。 (PHP 已经公开了几乎所有的 POSIX 系统调用,除了 pthreads,你最好不要在 PHP 脚本中使用线程。
  • 可以想象他们不喜欢我从 netcoder 复制答案的事实,但是这两个答案是在 30 秒内发布的。如果我通过了 90% 的答案并且另一个答案进来了,我通常会完成我正在输入的内容而不是放弃。
  • PHP 如何在没有扩展帮助的情况下进行原始内存访问?调用 PHP 标准库中不存在包装器的 C/C++ 函数?实例化 C++ 类?
  • @Billy ONeal 所以这意味着扩展可以转换为库?
【解决方案3】:

一个扩展可以变成一个库

不是自动的,不。扩展不是用 PHP 编写的;因此它不能简单地转换。当然可以编写执行等效操作的 PHP,但这样的脚本会比原始扩展慢得多,因为 PHP 的计算效率相对较低(与本机/编译语言相比)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-03
    相关资源
    最近更新 更多