Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4249637
  • 博文数量: 601
  • 博客积分: 15410
  • 博客等级: 上将
  • 技术积分: 6884
  • 用 户 组: 普通用户
  • 注册时间: 2007-05-16 08:11
个人简介

独学而无友,则孤陋而寡闻!

文章分类

全部博文(601)

文章存档

2020年(1)

2018年(4)

2017年(7)

2016年(42)

2015年(25)

2014年(15)

2013年(36)

2012年(46)

2011年(117)

2010年(148)

2009年(82)

2008年(37)

2007年(41)

分类: PHP

2013-03-11 15:59:58

直接看代码,你能看出有错误吗?

  1. class db extends PDO {
  2.         public function __construct($dsn, $user="", $passwd="") {
  3.                 try {
  4.                         parent::__construct($dsn, $user, $passwd, $options);
  5.                 } catch (PDOException $e) {
  6.                         $this->er( $e->getMessage() );
  7.                 }
  8.         }

  9.    public function er($msg){
  10.           echo $msg;
  11.     }
  12. }
实际上,这是一个错误的写法,会得到一个错误提示:

  1. Call to a member function error_handle() on a non-object in ……
为什么呢?$this应该是一个对象啊!
在第6行前加一行,var_dump($this)看一下,会发现它是NULL?

怎么回事?请思考一个问题:__construct完成之前有$this吗?

构造函数完成后才有$this,所以在构造函数里用$this是不恰当的一个写法。

正确的方法是改为static函数:

  1. class db extends PDO {
  2.         public function __construct($dsn, $user="", $passwd="") {
  3.                 try {
  4.                         parent::__construct($dsn, $user, $passwd, $options);
  5.                 } catch (PDOException $e) {
  6.                         db::er( $e->getMessage() );
  7.                 }
  8.         }
  9.    static function er($msg){
  10.           echo $msg;
  11.     }
  12. }
这次不再报错误了。





-----end----












阅读(3262) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~