作用域解析运算符不;t在php中给出编译时错误


scope resolution operator doesn't give compile time error in php

我创建了一个小的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将成为一个局部变量。

所以,是的,这是一种错误,你可以使用一个保留词作为标签。