我创建了一个小的PDO类,花了几个小时调试它,却找不到一个导致所有事情都失败的小拼写错误。下面要演示的是错误代码。
class MyPDO extends PDO
{
private static $instance = null;
function __construct(){
try{
parent::__construct("mysql:host=localhost;port=3306;dbname=blog", "root", "");
parent::setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
}catch(PDOException $e){
echo 'Exception in constructor'.print_r($e->trace(),true);
}
}
static public function getDB(){
if(self::$instance == null){
self:$instance = new MyPDO();
}
return self::$instance;
}
function selectAll($sql){
$stmt = self::$instance->prepare($sql);
$stmt->execute(array(":cat_id"=>1));
return $stmt->fetchAll(PDO::FETCH_ASSOC);
}
}
我想确认的是,如果有人已经看到它,或者它是一个bug,或者它可能被用于我不知道的其他事情。
我写的下面一行有问题。
self:$instance=new MyPDO();
它应该是带有双冒号的作用域解析运算符,即
self::$instance=new MyPDO();
令我惊讶的是,一个冒号没有生成任何警告或错误。。如果有人知道这件事,请分享。
在这个例子中,您定义了一个跳转标签(想想goto
)。
self: $instance = new MyPDO();
$instance将成为一个局部变量。
所以,是的,这是一种错误,你可以使用一个保留词作为标签。