PHP代码生成器介绍

PHP generators are awesome

I’m not sure if you heard but PHP 5.4 is going to support generators. This is fantastic news if you ask me.

Although PHP 5.3 has been out a while, few hosting providers have fully adopted it so I have little hope getting this awesomeness on the burner just yet – so I put together a little script. very similar to the yield functionality that will be implemented by our good friends at PHP.

For those python/Vala/Ruby/Java people out there this may not look like a big deal but it is… It shows that PHP, with all of its faults, is becoming a better language every day.

This script. by no means optimized and should be seen only as a way to possibly implement Yielding in PHP and how to use in Magento for a finer and better data interaction with exports and imports. Notice that I unset the data as much as possible even tough the garbage collector should take care of it.

As you can see there are 2 different versions, one for < 5.3 and one for 5.3 and greater. Since I can’t do math in my head I added an extra convert function and you should know that little function adds more memory to the mix… so take it out if you think your data is skewed. Try reading a file with this approach or a big array.
[code]<!--?php 

echo "Current Memory: " . convert(memory_get_usage(true)), "

function convert($size) {
    $unit = array('b', 'kb', 'mb', 'gb', 'tb', 'pb');
    return @round($size / pow(1024, ($i = floor(log($size, 1024)))), 2) . ' ' . $unit[$i];
}

function yield() {
    //echo 'Memory before processing the data: ', memory_get_usage(),'  in ',FUNCTION, ':
';
    $args = func_get_args();

    //do something with data
    //echo '
';
    //var_dump($args);
    // echo '
';
    // echo 'Memory after processing the data: ', memory_get_usage(),'  in ',FUNCTION, ':
';

    unset($args);
    return;
}

function process(array $someData = array()) {
    // do some computations that generates $data

    foreach ($someData as $data) {

        // echo 'Memory before yielding: ', memory_get_usage(),'  in ',FUNCTION, ':
';
        call_user_func('yield', $data);
        // echo 'Memory after yielding: ', memory_get_usage(),'  in ',FUNCTION, ':
';
    }
}

function process_53(array $someData = array()) {
    // do some computations that generates $data

    foreach ($someData as $data) {

        // echo 'Memory before yielding: ', memory_get_usage(),'  in ',FUNCTION, ':
';
        call_user_func(function() {
                    //echo 'Memory before processing the data: ', memory_get_usage(),'  in ',FUNCTION, ':
';
                    $args = func_get_args();

                    //do something with data
                    //echo '
';
                    //var_dump($args);
                    // echo '
';
                    // echo 'Memory after processing the data: ', memory_get_usage(),'  in ',FUNCTION, ':
';

                    unset($args);
                    return;
                }, $data);
        // echo 'Memory after yielding: ', memory_get_usage(),'  in ',FUNCTION, ':
';
    }
}

echo '
Let\'s do something fun
';
echo '
Starting memory: ', convert(memory_get_usage(true)), '
';
$longString = str_repeat(md5('php yield'), 2000); //heavy operation
$someData = array_fill(5, 60000, $longString); // this alone will raise your memory usage to the moon
echo '
Memory after getting the data: ', convert(memory_get_usage(true)), '
';

process_53($someData);
unset($someData);
echo '
End memory: ', convert(memory_get_usage(true)), '
';
[/code]

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/301743/viewspace-742850/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/301743/viewspace-742850/

支持MySQL 和 sqlite数据库,快速构建项目原型,直接生成前后台CRUD代码片段,还可根据需要自行定制代码模板,减少重复劳动。 写这个东西的原因是因为我最近沮丧的发现很多时候我都在做重复的事情,比如重复写最简单的CRUD方法,编写表单,写前台样式表等等。 2014年9月27日23:53:38更新:升级至0.3版,此次变化较大,放弃了单文件的形式,但是功能更加丰富,支持直接生成文件,快速构建项目原型 ThinkphpHelper ============== 支持MySQL 和 sqlite数据库,快速构建项目原型,直接生成前后台CRUD代码片段,还可根据需要自行定制代码模板,减少重复劳动。 写这个东西的原因是因为我最近沮丧的发现很多时候我都在做重复的事情,比如重复写最简单的CRUD方法,编写表单,写前台样式表等等。 Thinkphp对于后台操作的支持已经非常强大,再加上最近非常流行的Bootstrap框架让前台样式也变得容易遵循一个标准,于是我决定开始写一个属于自己的代码生成器。 我希望它操作足够简单,让人一看就懂,对MySql和Sqlite数据库都能够稳定生成CRUD代码就好,还如果还能顺便生成一些符合Bootstrap框架的View代码就更好啦。 ThinkphpHelper诞生至今多谢大家的支持。在这个版本中我放弃了单文件的形式,以便实现更多想法。你可以看到现在界面更漂亮了,功能也更强大了。这个版本最大的亮点就是支持直接生成文件,除了数据库外,你只需要写3行左右的代码就可以快速构建出一个原型系统。我建议你可以根据你的需要自行修改Template文件夹下的模板,使之更符合你的项目需求。 测试中我使用的是Sqlite数据库,复制数据库文件到项目目录下,如使用Mysql数据库可以省略此步骤。 将TPH文件夹复制到项目目录下。 修改项目配置文件,主要是配置数据库信息。 访问一下TPH,应该看到以上界面 点击“生成模块选项”选择好目标模块,把需要生成的表名打上勾,点击生成。成功后,会有提示生成路径。此步骤主要是为了生成布局文件。 点击“生成CRUD代码”,注意选择和上一步相同的数据表,点击生成文件。 修改Index控制器下的index方法内容为:$this->show();如图 再次访问你的项目,have fun. 注意,在使用之前一定要准备好你的数据库以及数据库里的数据表,并且配置好你的模块,不过聪明的你一定知道它是怎么用的对吧? 支持Thinkphp3.2.2 ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ 项目地址:https://github.com/zhuanqianfish/ThinkphpHelper 详细使用说明地址:http://zhuanqianfish.github.io/ThinkphpHelper ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑ ThinkphpHelper遵循Apache2开源协议发布,并提供免费使用。 标签:Web框架
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值