入门metaPHP(php元编程引擎)

  2017年,柯洁对战AlphaGo,让我们了解到在人工智能面前人类智力的渺小。更让从事开发工作的我感到兴奋,我深深地感觉开发的万能性,程序帮助很多的行业释放脑力。但是每一个开发人员的开发工作却很不智能,完全用自己的脑力去开发,这不免是一个极大的讽刺。既然人工智能应用范围这么广,为什么不把他应用到开发过程中呢。第一次了解到元编程的概念时,我的头脑一下被点燃了,我当时就萌生了一个想法,用程序去写程序一定是未来。

  我在从事php开发过程中,遇到了很多纯粹“体力型”的开发工作

  广告图片进行更替,但是又没有经历去做广告后台,只能手动去更换代码。

  数据库表字段增加,要给对应的后台增加对应的输入框。

  某个php接口要淘汰,需要整个代码库去找调用,然后替换成新的推荐方法。

 

  细细想来,真的是大量的工作修改的结果是固定的。如果这部分工作改为用人工智能去帮助我们写一部分代码,那么我们的脑力就可以提炼出来去做更重要的事情。

 

我打算拿我最熟悉的语言php入手,开发一个开发php代码的php引擎

 

metaPHP是一个php元编程的引擎,用于用php语言生成php代码。

那么我们以一个最常用的HelloWorld的demo来作为开始。



初始化,项目的代码发布在github上,可以去拉到自己的项目中。

项目代码在https://github.com/13601313270/metaPHP

首先引入metaPHP引擎,在自己的代码中加载metaPHP引擎的include.php文件就引入了metaPHP

<?php
include './metaPHP/include.php';//引入metaPHP
$metaApi = new phpInterpreter('');//参数的含义后面会具体讲解

部署好了metaPHP,那么我们就可以开始demo了。

以一个输出HelloWorld举例,php代码应该是

<?php
    echo 'Hello World';

虽然只有代码很简单,但是我们仔细审视这段代码,就自然可以拆解出更加详细的结构

首先这段代码,是由一个php代码开始符和一个echo语句组成,echo可以理解为调用echo函数,参数是一个字符串,字符串的值是Hello World

 

<?php
include './metaPHP/include.php';//引入metaPHP
$metaApi = new phpInterpreter('');

//输出hello World的代码的结构,可以理解为下面的复合数组形式
$metaApi->codeMeta = array(
    'type'=>'window',
    'child'=>array(
        array(
            'type'=>'phpBegin'
        ),
        array(
            'type'=>'echo',
            'value'=>array(
                'type'=>'string',
                'data'=>'Hello World',
            ),
        )
    ),
);
print_r($metaApi->getCode());//获得生成的php代码

 

每一个结构都包含一个type字段,代表了这个代码的类型,每一种代码结构都必有type属性,正如刚才说的,代码层次一层一层的树形结构组成。最顶层是type=window,代表php运行时。

window运行时会由多个子代码组成(php开始符、和echo语句)。所以有一个child数组来定义下一级的语句。具体的语法后面的章节会讲到。

$metaApi->codeMeta = array(
    'type'=>'window',
    'child'=>array(
        array(
            'type'=>'phpBegin'
        ),
        array(
            'type'=>'echo',
            'value'=>array(
                'type'=>'string',
                'data'=>'Hello World',
            ),
        )
    ),
);

执行这个php程序,会输出getCode函数的结果。

这是一个生成php代码的php代码,所以结果是一个php代码,接下来你可以把代码写入文件系统,就得到了一个可执行的php文件。


 

当然元编程中介代码如果想执行,也是有对应的方式直接执行,而不必必须保存文件再去执行。这种方式常用于测试、数据验证等中间步骤

需要使用的就是evalMetaCode类

include './metaPHP/include.php';
$metaApi = new phpInterpreter('');
$metaApi->codeMeta = array(
    'type'=>'window',
    'child'=>array(
        array(
            'type'=>'phpBegin'
        ),
        array(
            'type'=>'echo',
            'value'=>array(
                'type'=>'string',
                'data'=>'Hello World',
            ),
        )
    ),
);
//接收元代码(数组化的代码),然后直接run执行
$evalObj = new evalMetaCode($metaApi->codeMeta,array());//使用evalMetaCode类来接收数据化的代码,然后执行run就可以直接运行 $evalObj->run();

 恭喜你已经开始了metaPHP自动代码编写之旅

 

目录

元代码结构

metaPHP数组的使用

函数的使用

类的定义和使用

杂七杂八的

修改已有代码

 

也欢迎进行QQ联系本人 ,交流我在开发metaPHP过程中的经验

QQ:309568486

posted @ 2017-09-21 18:00  浩然哥哥v5  阅读(1553)  评论(0编辑  收藏  举报