服务器里的任何一个php页面,每次客户来请求,我都要先做一些处理,经过加工以后,才能给用户返回结果。
比如某页面:
<?php
     include('myCls.php');
     $mycls = new MyClass();
     $mycls->foo();
?>
<html>...</html>
但是因为页面实在太多了,真不想每次都include那个文件的自定义类,过于频繁的IO操作。所以我想到了几种方式,把我的类变成模块什么的。让我的类直接使用不需要include,就像原生函数那样多好?但是水平有限,我想象编写自己的apache的so模块是很难的事,pecl扩展dll也不容易,所以不知道pear能不能满足我的要求。

解决方案 »

  1.   

    自动加载对象
    很多开发者写面向对象的应用程序时对每个类的定义建立一个 PHP 源文件。一个很大的烦恼是不得不在每个脚本(每个类一个文件)开头写一个长长的包含文件列表。 在 PHP 5 中,不再需要这样了。可以定义一个 __autoload 函数,它会在试图使用尚未被定义的类时自动调用。通过调用此函数,脚本引擎在 PHP 出错失败前有了最后一个机会加载所需的类。 Note: 在 __autoload 函数中抛出的异常不能被 catch 语句块捕获并导致致命错误。 
    Note: 如果使用 PHP 的 CLI 交互模式 时,Autoloading 不存在。 Example #1 Autoload 例子本例尝试分别从 MyClass1.php 和 MyClass2.php 文件中加载 MyClass1 和 MyClass2 类。 <?php
    function __autoload($class_name) {
        require_once $class_name . '.php';
    }$obj  = new MyClass1();
    $obj2 = new MyClass2();
    ?> 
      

  2.   

    如此说来原来是:
    include('cls.php');
    $obj = new myCls();换成了:
    function __autoload($class_name){require_once "$class_name.php"}
    $obj = new myCls();和尚换成了道士,猫叫了个咪,还是要去手动指定一下包含文件。(不过这样也不错了)我的设想是,能不能再稍微深入一点儿,用一种什么方式,把我的这个类放到php或者apache的扩展里,是不是更好些呢?比如我想要调用cURL功能的时候,我就在php.ini的设置里打开关于cURL的引用,就可以直接使用cURL的函数了。因为我定义的那个类,是访问服务器下面所有上千个网页时,绝对是第一步要执行的。(实际上,任何被请求的页面,全部的内容仅仅是运行那个类,只有一行!所有的真正结果,将在那个类里面计算然后返回。)如此说来,我想知道,有么有什么方法,能让apache收到任何HTTP请求之后,在处理请求的那个页面之前,让我有机会运行一下我的那个类,然后直接response结果给客户,甚至连那个页面真正存在与否,里面写了些什么我都毫不介意。