我得到了意想不到的T_TRY,期待T_FUNCTION错误消息,我也不确定为什么会这样,我们不能在类中使用try和catch块,如下所示:
class Processor
{
protected $dao;
protected $fin;
try
{
public function __construct($file)
{
//Open File for parsing.
$this->fin = fopen($file,'w+') or die('Cannot open file');
// Initialize the Repository DAO.
$this->dao = new Dao('some name');
}
public function initiateInserts()
{
while (($data=fgetcsv($this->fin,5000,";"))!==FALSE)
{
$initiate_inserts = $this->dao->initiateInserts($data);
}
}
public function initiateCUpdates()
{
while (($data=fgetcsv($this->fin,5000,";"))!==FALSE)
{
$initiate_updates = $this->dao->initiateCUpdates($data);
}
}
public function initiateExecuteIUpdates()
{
while (($data=fgetcsv($this->fin,5000,";"))!==FALSE)
{
$initiate_updates = $this->dao->initiateIUpdates($data);
}
}
}
catch (Exception $e)
{
}
}
答案 0 :(得分:3)
您不能将所有方法定义放入一个try-catch块中。
而不是
class Foo {
try {
public function func1() { }
public function func2() { }
}
catch(Exception $e) {
}
}
你必须使用
class Foo {
public function func1() {
try {
...
}
catch(Exception $e) {
...
}
}
public function func2() {
try {
...
}
catch(Exception $e) {
...
}
}
}
答案 1 :(得分:2)
你不能在方法之外的类中使用任何“做这个东西”代码。在这些大括号内没有“尝试做”,因为里面的东西只是方法定义。
答案 2 :(得分:2)
不要在每个方法中尝试捕获,只需在使用类时尝试捕获:
try {
$p = new Processor($file);
$p->initiateInserts();
$p->initiateCUpdates();
// and so on...
} catch (Exception $e) {
// handle the error...
}
通过这种方式,您的课程将更加清晰,您可以决定如何处理错误。特别是如果你在多个地方使用你的课程 - 你可以为每个案例定制错误处理。