Ответ 1
Объявить $siteId вне конструкции try/catch и использовать !empty($siteId)
внутри catch.
$siteId = null;
try {
}catch(Exceptions $e) {
if( ! empty($siteId) ) {
}
}
Я пытаюсь отладить некоторый код. Я хочу показать переменные, определенные в try
в 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!
. Что я делаю неправильно?
Объявить $siteId вне конструкции try/catch и использовать !empty($siteId)
внутри catch.
$siteId = null;
try {
}catch(Exceptions $e) {
if( ! empty($siteId) ) {
}
}
Переменные в PHP привязаны к файлу, методу или функции (см. http://php.net/manual/en/language.variables.scope.php), поэтому я не уверен, как это не работает для вас. Быстрая cut-n-paste в PhpStorm выводит правильный ответ для меня.
Попробуйте добавить \
в класс 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();
}
?>
попытайтесь вывести $siteId из try/catch:
<?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 7.2, в моем случае переменная, определенная внутри блока Try, не доступна внутри catch, поэтому здесь есть обходной путь:
protected $var;
try {
$var = 'Hello World';
// Saving var in an external variable so it can be accessed by Catch
$this->var = $var;
throw new Exception("Error Processing Request", 1);
} catch (Exception $e) {
var_dump($var); // null
var_dump($this->var); // 'Hello World'
}
Я столкнулся с той же проблемой в 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();
}
}