【问题标题】:Convert PHP class to a native class将 PHP 类转换为本机类
【发布时间】:2021-06-01 20:00:03
【问题描述】:

有没有办法将一组 PHP 类嵌入到 PHP 中,这样我就可以在本地调用它们而无需每次都将类作为文件包含在内?我需要在本地或私人服务器上使用它。

【问题讨论】:

  • 为什么要这样做?它会为您解决什么问题?
  • @Tim 如果您将函数文件更改为新版本并希望确保每个文件都使用新版本,这很好
  • 我想缩短处理这些文件的时间,并在我的私人服务器上使用它们作为 PHP 的原生部分

标签: php pear


【解决方案1】:

如果我理解正确,你可能想使用__autoload()

来自@KingCrunch的备注:

__autoload() 函数不应该 不再使用,因为如果你使用 其他库,它定义了一个 spl-loader,该函数永远不会被调用 从此

所以如果你坚持SPL Autoload functions会更好。

【讨论】:

  • 我还建议使用SPL Autoload functions
  • 不应再使用__autoload() 函数,因为如果您使用其他定义了 spl-loader 的库,此后该函数将不再被调用。
  • 但是在这里我仍然需要将类称为文件,而这正是我不想做的!
  • @Dewan159 是的,你是对的。但是你不需要包括它们。那是不是最初的问题?
【解决方案2】:

为了懒惰,你可以使用 php.ini 设置:

 auto_prepend_file = /usr/share/php/allmypredefinedclasses.php

auto_prepend_file 在任何脚本运行之前都包含在内。听起来这就是你想要的。它可以很好地定义类或函数,或者只是一个自动加载器。但是您应该避免将它用于过度特定于项目的功能 - 因为它会影响 所有 PHP 脚本。

(我个人使用它来支持一些 PHP6 功能..)

【讨论】:

  • 谢谢,但这不适用于我的情况,就像我想要的那样
  • 好的。现在看来你想把你的 php 类变成原生的 PHP 扩展。但无论如何,这可能是太多的努力。 (顺便说一句,使用字节码缓存大大减少了脚本处理时间。)
  • 是的,原生 PHP 扩展,我该怎么做
  • 这非常困难。我怀疑你真的想这样做。原生 PHP 扩展必须用 C 编写,而不是 PHP。 talks.php.net/show/extending-php-apachecon2003php.net/~wez/extending-php.pdfconf.phpquebec.com/slides/2009/… - 我什至找不到好的介绍。
  • 不确定你的意思。 PEAR 类是普通的 PHP 脚本,您通常可以手动安装它们而无需包系统。
【解决方案3】:

只需添加 php.ini 的路径,它们将始终在该服务器上可用

【讨论】:

    【解决方案4】:

    将没有<?php?>的每个文件的内容复制到一个文件classes.inc.php中,只包含这个文件。

    [编辑] 我不认为你需要这么多性能,因为 PHP 已经很快了。但是,如果您确实将所需的每个类文件都包含在每个文件中,有时只需要其中一个类,那么这是一个坏主意。

    你为什么不把你的类分成模块:

    例如:DatabaseModule database.module.php 包含类 connectionqueriesresults

    比把你所有的类放在这样的组中并将它们移动到一个目录modules/

    比你可以使用自定义函数,这里举个简单的例子:

    <?php
    function loadModule($name) {
        $file_path = './modules/' . $name . '.module.php';
        require_once $file_path;
    }
    ?>
    

    现在您可以使用loadModule 函数在每个文件中添加您需要的所有模块。

    希望对你有所帮助。

    【讨论】:

    • 我想缩短这些类由 php 修改的时间,并将它们用作语言的原生部分
    • 你为什么不使用一个工具,它将服务器上的 PHP 预编译为 C 代码,这使得它非常快。最终this question 可以帮助你。
    • leo,我已经在使用这种风格了,但正如我告诉你的,我想剪掉所有这些,并在任何文件中随时调用我想要的任何类,而不包括类文件或使用附加功能,谢谢:)
    【解决方案5】:

    如果您使用的是 MVC 模式,例如,每次请求都会调用 index.php 页面,那么 __autoload 将是一个很好的解决方案。如果您无法按照之前的建议使用“auto_prepend_file”。

    希望对您有所帮助。

    【讨论】:

      猜你喜欢
      • 2018-03-13
      • 1970-01-01
      • 2022-11-18
      • 1970-01-01
      • 1970-01-01
      • 2014-10-06
      • 1970-01-01
      • 2015-10-08
      相关资源
      最近更新 更多