[英]Properties cannot be used outside of try catch blocks
我正在嘗試在try catch塊中使用屬性。 try catch塊在類內部。 我想擴展一個特定的類,使其成為處理異常的類的子類。 問題是,當我嘗試使用子類中的那些變量時,它總是說未定義。 我必須刪除兩個類才能捕獲屬性。 通過在try catch塊內部之外添加return語句(我在其中添加return 1)來閱讀此處的其他答案后,它似乎不起作用,並且始終顯示未定義的變量。 有什么幫助嗎?
語言是PHP
沒有類的源代碼可以完美地工作:
try
{
//$pdo variable to insert PDO object information
$pdo = new PDO('mysql:host=localhost;dbname=studenti', 'root', '');
//Set php to catch exceptions
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
//Set UTF-8 for character encodings
$pdo->exec('SET NAMES "utf8"');
}
//Catch error if unable to connect
catch(PDOException $e)
{
//error variable
$error = 'Unable to connect with database. ' . $e->getMessage();
//include file once and show on screen error message
include_once $_SERVER['DOCUMENT_ROOT'] . '/inc/error.inc.php';
//Exit and don't process further
exit();
}
//Another Exception handling
try
{
//Select statement
$sql = 'SELECT * FROM dega';
$select = $pdo->query($sql);
}
catch(PDOException $e)
{
//error variable
$error = 'Unable to select table. ' . $e->getMessage();
//include file once and show on screen error message
include_once $_SERVER['DOCUMENT_ROOT'] . '/inc/error.inc.php';
//Exit and don't process further
exit();
}
帶類的源代碼不起作用:
<?php
//PDO class, connection with MySQL database
class Connect
{
function connection()
{
$pdo = null;
try
{
//$pdo variable to insert PDO object information
$pdo = new PDO('mysql:host=localhost;dbname=studenti', 'root', '');
//Set php to catch exceptions
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
//Set UTF-8 for character encodings
$pdo->exec('SET NAMES "utf8"');
}
//Catch error if unable to connect
catch(PDOException $e)
{
//error variable
$error = 'Unable to connect with database. ' . $e->getMessage();
//include file once and show on screen error message
include_once $_SERVER['DOCUMENT_ROOT'] . '/inc/error.inc.php';
//Exit and don't process further
exit();
}
}
}
class Select extends Connect
{
function selection()
{
//Another Exception handling
try
{
//Select statement
$sql = 'SELECT * FROM dega';
$select = $pdo->query($sql);
}
catch(PDOException $e)
{
//error variable
$error = 'Unable to select table. ' . $e->getMessage();
//include file once and show on screen error message
include_once $_SERVER['DOCUMENT_ROOT'] . '/inc/error.inc.php';
//Exit and don't process further
exit();
}
}
}
//Output if successful
$error = 'Database connection established.';
include $_SERVER['DOCUMENT_ROOT'] . '/inc/error.inc.php';
?>
閱讀有關類和對象的信息 。
class Connect
{
protected $pdo = null;
public function connection()
{
$pdo = null;
try
{
$this->pdo = new PDO('mysql:host=localhost;dbname=studenti', 'root', '');
$this->pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$this->pdo->exec('SET NAMES "utf8"');
} catch (PDOException $e)
{
$error = 'Unable to connect with database. ' . $e->getMessage();
include_once $_SERVER['DOCUMENT_ROOT'] . '/inc/error.inc.php';
exit();
}
}
}
class Select extends Connect
{
function selection()
{
try
{
$sql = 'SELECT * FROM dega';
$select = $this->pdo->query($sql);
} catch (PDOException $e)
{
$error = 'Unable to select table. ' . $e->getMessage();
include_once $_SERVER['DOCUMENT_ROOT'] . '/inc/error.inc.php';
exit();
}
}
}
將$pdo
放在connection()
之前:
class Connect
{
protected $pdo = null; // or var $pdo = null;
function connection()
{
...
在函數內部,它是一個局部變量,而不是類級別的屬性。
編輯 :
PHP需要$this-><class-variable>
來訪問函數中的類屬性。 (請在下面查看@Sectus的答案。)僅使用$ pdo即可在兩個方法中即時創建局部變量,但僅在selection()
產生錯誤,因為這是在不初始化PDO()
情況下調用query()
的地方。 PDO()
對象。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.