2009-05-31 52 views
32

我明白try-catch语句的作用,但是通过阅读php.net上的文档,我无法将其实现到我自己的代码中。我需要一个真实的例子来帮助我理解。在PHP中尝试catch语句,其中文件不上传

如果上传不成功,我该如何将此示例转换为try catch语句?

$move = move_uploaded_file($_FILES['file']['tmp_name'], $_SERVER['DOCUMENT_ROOT']."/uploads/".$_FILES['file']['name']); 

if (!$move) { 
    die ('File didn't upload'); 
} else {    
    //opens the uploaded file for extraction 
    echo "Upload Complete!"; 
} 

这可能不是一个很好的例子,但任何帮助,将不胜感激。

+0

还看到:http://stackoverflow.com/questions/1087365 – dreftymac 2011-10-11 17:32:52

回答

48

你可以这样做。

try { 
    //throw exception if can't move the file 
    if (!move_uploaded_file(...)) { 
     throw new Exception('Could not move file'); 
    } 

    //do some more things with the file which may also throw an exception 
    //... 

    //ok if got here 
    echo "Upload Complete!"; 
} catch (Exception $e) { 
    die ('File did not upload: ' . $e->getMessage()); 
} 

这对上面的例子有点没有意义,但你应该明白。请注意,您可以从任何地方抛出异常(例如,在您使用try {}调用的函数/方法中),它们将向上传播。

+1

感谢您的回复和解答!我明白这不是一个好例子。什么时候适合使用例外?谢谢! – 2009-05-31 23:33:01

+0

我不瘦有好或坏的例子。 Try/Catch语句在有用时非常有用。 你应该考虑的唯一事情是,当函数被滥用时,php会抛出E_ERROR或E_WARNING。 – 2009-06-01 00:03:40

8

好吧,如果你想使用异常,你可以这样做:

function handleUpload() { 


    $move = move_uploaded_file($_FILES['file']['tmp_name'], $_SERVER['DOCUMENT_ROOT']."/uploads/".$_FILES['file']['name']); 

    if (!$move) { 
     throw new Exception('File Didnt Upload'); 
    } 

} 

try { 
    handleUpload(); 
    echo "File Uploaded Successfully"; 
} catch(Exception $ex) { 
    die($ex->getMessage); 
} 

我知道这可能看起来像膨胀 - 但你可以从调用堆栈中的任何地方调用该方法,并赶上任何时候都是例外。

+1

只需要注意,如果您有例外的类层次结构,那么异常处理将更有用。在特定的Exception子类中使用catch通常很有用,这样您可以选择在什么级别的代码中处理哪些问题。 – 2012-05-25 18:45:39

6

try-catch语句用于处理异常。我不相信功能move_uploaded_files可以抛出和异常,因为我认为你写的代码是正确的。通话后,你看看返回码。如果它是错误的,则结束处理,否则报告成功。

3

根据PHPbug中的类似帖子,只有OO代码(面向对象的代码)抛出异常。这意味着像move_uploaded_file这样的函数不会抛出它们自己的异常,但其他一些代码将会抛出异常。

2

我发现this有帮助。

应用异常处理和尝试抓取东西的一个很好的例子是here

0

你必须采取的[异常的最佳做法在PHP 5.3] [1]在PHP

异常处理是不以任何拉伸新功能的面貌。在下面的链接中,您将看到基于异常的PHP 5.3中的两个新功能。第一个是嵌套异常,第二个是由SPL扩展(现在是PHP运行时的核心扩展)提供的一组新的异常类型。这两项新功能都已被纳入最佳最佳实践之列,值得进行详细审查。

http://ralphschindler.com/2010/09/15/exception-best-practices-in-php-5-3