[英]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.