范围解析运算符不会在php中给出编译时错误

时间:2011-06-12 15:28:22

标签: 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);
    }

}

我想确认一下,如果有人已经看过它或者它是一个错误,或者它可以用于其他我不知道的东西。

我写的以下行有问题。

  

self:$ instance = new MyPDO();

它应该是具有双冒号的范围解析运算符,即

  

self :: $ instance = new MyPDO();

令我惊讶的是,单个冒号没有产生任何警告或错误。如果有人知道这一点,请分享。

1 个答案:

答案 0 :(得分:4)

在这种情况下,您正在定义跳转标签(想想goto)。

self:  $instance = new MyPDO();

$ instance将成为局部变量。

所以,是的,你可以使用保留字作为标签。