douzhang6496 2013-10-07 11:44
浏览 20
已采纳

从PHP中的原始类文件生成原型类

Is there any way in PHP to read a php source file which contains one or more classes and then create a prototype class (similar to interface)

Original class looks like this:

class Math {

    private $a;
    private $b;

    public function set_a($a) {
        $this -> a = $a;
    }

    public function set_b($b) {
        $this -> b = $b;
    }

    public function sum() {
        return $a + $b;
    }

}

The prototype file must look like this:

class Math {

    public function set_a($a) { }

    public function set_b($b) { }

    public function sum() { }

}

I want to do this dynamically by reading the class files at runtime and generating prototype classes. Is there any library in PHP through which I can read class meta information from file without including.

EDIT: I need to create a PHP file listing all prototype classes. The reason is that I have created a PHAR file for my library. And whenever I need to use any code from within the PHAR file i just include it using the following syntax.

require_once("phar://mylibrary.phar/math.php");

But the problem is that the code hints and intelli-sense does not work. I am using zend studio. So I thought, if I create a single file with all prototype classes and then include into new project then code hinting will work.

  • 写回答

1条回答 默认 最新

  • duanjue6584 2013-10-07 12:06
    关注

    If your coding style guarantees that you'll never break the arguments of a function declaration over multiple lines, you can hack a prototype generator pretty easily by selecting lines that match the following patterns (and correcting the braces as needed):

    /^class /
    /^}/
    /^\s*(\w+)?\s*function\b/   # Must append a closing } to each line matching this
    

    You could rig a PHP script to do all this, but if you've got the Unix tools in your environment, the above is a few characters away from being a complete sed script.

    Here it is embedded in a PHP script, as requested (not tested):

    $fp = fopen("source.php");
    while (($line = fgets($fp)) !== false) {
        if (preg_match("/^class |^}/", $line))
            print $line;
        elif (preg_match('/^\s*(\w+)?\s*function\b/', $line))
            print rtrim($line) . " }
    ";
    }
    

    Adapt/extend as needed for your coding style.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 三菱伺服电机按启动按钮有使能但不动作
  • ¥20 为什么我写出来的绘图程序是这样的,有没有lao哥改一下
  • ¥15 js,页面2返回页面1时定位进入的设备
  • ¥200 关于#c++#的问题,请各位专家解答!网站的邀请码
  • ¥50 导入文件到网吧的电脑并且在重启之后不会被恢复
  • ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。
  • ¥15 绘制多分类任务的roc曲线时只画出了一类的roc,其它的auc显示为nan
  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?