簡體   English   中英

PHP try catch:獲取try中定義的變量

[英]PHP try catch: get variable defined in try

我正在嘗試調試一些代碼。 我希望能夠顯示try in catch定義的變量。 例如變量$siteId

<?php
try {
    $siteId = 3;
    if(1 !== 2) {
        throw new Exception('1 does not equal 2!');
    }
} catch(Exception $e) {
    $moreInfo = '';
    if(isset($siteId)) {
        $moreInfo .= ' SiteId»' . $siteId;
    }
    echo 'Error' . $moreInfo . ':' . $e->getMessage();
}
?>

我得到的回應是Error: 1 does not equal 2! 而不是Error SiteId»3: 1 does not equal 2! . 我究竟做錯了什么?

在 try/catch 結構外聲明 $siteId 並在 catch 內使用!empty($siteId)

$siteId = null;
try {

}catch(Exceptions $e) {
  if( ! empty($siteId) ) {

  }
}

PHP 中的變量范圍是文件、方法或函數,(請參閱http://php.net/manual/en/language.variables.scope.php ),所以我不確定這對你有什么用. 快速剪切和粘貼到 PhpStorm 中會為我輸出正確的響應。

使用catch() ,不能使用catch (Exception $e) use($foo)將上下文傳遞給它。 因此,解決方法是將 var 分配為類的狀態:

private $foo;

try  {

 $foo = 'Foo';
 $this->foo = 'Foo';

} catch (Exception $e) {

   var_dump($foo); // null
   var_dump($this->foo); // 'Foo'

}

嘗試將\\添加到Exception類。 所以你的代碼變成:

<?php
try {
    $siteId = 3;
    if(1 !== 2) {
        throw new \Exception('1 does not equal 2!');
    }
} catch(\Exception $e) {
    $moreInfo = '';
    if(isset($siteId)) {
        $moreInfo .= ' SiteId»' . $siteId;
    }
    echo 'Error' . $moreInfo . ':' . $e->getMessage();
}
?>

嘗試從 try/catch 中移出 $siteId:

<?php
$siteId = 3;
try {        
    if(1 !== 2) {
        throw new Exception('1 does not equal 2!');
    }
} catch(Exception $e) {
    $moreInfo = '';
    if(isset($siteId)) {
        $moreInfo .= ' SiteId»' . $siteId;
    }
    echo 'Error' . $moreInfo . ':' . $e->getMessage();
}
?>
<?php
$siteId = 3;
try {

    if(1 !== 2) {
        throw new Exception('1 does not equal 2!');
    }
} catch(Exception $e) {
    $moreInfo = '';
    if(!empty($siteId)) {
        $moreInfo .= ' SiteId»' . $siteId;
    }
    echo 'Error' . $moreInfo . ':' . $e->getMessage();
}
?>

我在php7中遇到了相同的問題,並且以某種方式對我有效

class dbConfig {
    private $servername ; private $username; private $password; private $conn;

     public function __construct()
    {
        $this->connect();
    }
    public function connect()
    {
        $servername = 'localhost';
        $username = 'root';
        $password= '';
        $dbName = 'dbname';
        try {
            $conn = new PDO("mysql:host=$servername;dbname=$dbName", $username, $password);
            // set the PDO error mode to exception
            $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
            echo "Connected successfully"; 
            }
        catch(PDOException $e)
            {
            echo "Connection failed: " . $e->getMessage();
            }
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM