偷懒万岁-让PHP

(本文于2010.10.01发表在《草根》杂志第四期,LAMP交流超级群(500人):106382633)
<?php
class a {
......
function a1() {
include_once ROOT_PATH . 'lib/db.php';
$db = new db();
$res = $db->get_array('select * from table');
......
}
......
}
?>
很平常的一段代码不是吗?相信大家也都写过类似的东西,我以前也写过很多。由于我是一个懒人,懒到不想多打几个字,于是我很讨厌每次都要手工去new一下那个对象,这得让我多打多少个字啊,累啊。于是我就在想,怎么能让php自己去对某个对象进行初始化呢?
古人教导我们“书中自有颜如玉,书中自有黄金屋,书中自有偷懒法……”你说什么?没有最后那句?哦,好吧,那是我加的- -! 反正多看看书没坏处啦,你问什么书?当然是php手册啦,其他的书我基本没看过,主角是未央生那本算是看过……
言归正传啊,我就拿着手册看啊、看啊、看啊,终于,我找到了一个魔术方法,__get()
很符合我的要求嘛,不错不错,接下来需要做的就是思考,如何来做呢?第一次,我将代码写成了这样:
<?php
class a {
......
public function __get($name) {
$name = strtolower(trim($name));
$file = ROOT_PATH . 'lib/' . $name . '.php';
if(is_file($file)) {
include_once $file;
$obj = new $name;
return $obj;
} else {
die('no file');
}
}
function a1() {
$res = $this->db->get_array('select * from table');
......
}
......
}
?>
但是很快,我发现不对劲了,每执行一次$this->db的时候都会重新new一个对象出来,这可不行,用的多了,内存不是全完蛋了?于是我又想到了单件模式,略加思考得出了以下的版本:
<?php
class a {
......
public function __get($name) {
static $instances = array();
$name = strtolower(trim($name));
$instance = null;
if (!array_key_exists($name, $instances)) {
$file = ROOT_PATH . 'lib/' . $name . '.php';
if(is_file($file)) {
include_once $file;
$instances[$name] = new $name;
} else {
die('no file');
}

$instance = $instances[$name];
return $instance;
}
function a1() {
$res = $this->db->get_array('select * from table');
......
$this->tpl->assign('res', $res);
}
......
}
?>
太爽了,不是么?只要类名和它自己的文件名相同,并且放在指定的目录下,我就可以不用去include,不用去new,使用的时候直接 $this->类名->类中的方法/属性 偷懒成功了!我相信不少朋友肯定想到了进一步偷懒的方法对吧?伟大的谁谁谁曾经说过,“不会偷懒的程序员不是一个好的程序员”,所以让大家一起开动脑筋,想出更多偷懒的办法来吧。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值