php自定义异常
我想知道如何写自定义异常处理程序. 以便我可以做 之类的事情 throw new dbException($sql, $message); 并让它输出 您的查询中存在错误 消息:{$消息在这里} 查询:{$ sql在这里} 线:{行异常} 文件:{文件异常是从} 抛出的 ,但我也想捕获例如语法错误和解析错误(如果可能的话) 解决方案 好吧,您可以扩展Exception class 但是你喜欢.对于自定义例外,您可能需要查看帖子: php 5 oop:委托和自定义异常 您还应该发现此线程有用: 自定义异常消息:最佳实践 其他解决方案 除非我误解了您的问题,否则您应该能够扩展PHP的Exception类. 其他解决方案 为什么不使用自己的异常类别从标准基础异常派生?请参阅扩展例外手动.
0 2023-05-30
编程技术问答社区
如何避免这个PDO异常。当其他未缓冲的查询正在进行时不能执行查询
我想在我的页面中打印一张简单的表,其中包含3列,building name,tags和architecture style.如果我尝试检索building names和arch. styles的列表,则没有问题: SELECT buildings.name, arch_styles.style_name FROM buildings INNER JOIN buildings_arch_styles ON buildings.id = buildings_arch_styles.building_id INNER JOIN arch_styles ON arch_styles.id = buildings_arch_styles.arch_style_id LIMIT 0, 10 我的问题始于我刚刚写过的查询的每一个构建的前5个标签. SELECT DISTINCT name FROM tags INNER JOIN buildings_tags ON buildings_
0 2023-05-30
编程技术问答社区
类中的PHP异常
我正在为我的朋友编写Web应用程序(PHP),并决定使用Java的有限OOP培训. 我的问题是,在我的课程/应用程序中,最好的方法是什么是特定的关键事物失败而没有真正打破我的页面. 我的问题是我有一个对象" summarcmper",该对象将camper_id带有参数,因为它的参数将所有必要的数据从数据库加载到对象中.假设某人在不存在的查询字符串中指定了camper_id,我将其传递给对象构造函数,负载失败.我目前没有看到从构造函数返回false的方法. 我已经阅读了我可以在例外情况下执行此操作,如果数据库中未找到记录,或者某种验证在应用程序中输入了camper_id等. . . 但是,我并没有真正找到一种很好的方法来提醒我的程序,即对象负载失败了.我尝试从渔获量内部返回false,但该对象仍然存在于我的PHP页面中.我确实知道我可以将变量$ is_valid = false如果负载失败,然后使用GET方法检查对象,但我认为可能有更好的方法. 如果负载失败,
0 2023-05-30
编程技术问答社区
PHPUnit没有捕捉到预期的异常情况
我有一组测试,我想测试我的课程在正确的时间投掷异常.在示例中,我的类使用__get()魔法方法,因此我需要测试当检索无效属性时会引发异常: function testExceptionThrownWhenGettingInvalidProperty() { $obj = new MyClass(); $this->setExpectedException("Property qwerty does not exist"); $qwerty = $obj->qwerty; } 班级会丢下错误,但不仅仅是通过,而是没有被抓住! There was 1 error: 1) QueryTest::testExceptionThrownWhenGettingInvalidProperty Exception: Property qwerty does not exist 我以前在使用SimpleTest,$this->expectException(new Exc
0 2023-05-30
编程技术问答社区
将 php 异常扔到更高层次的 catch 块中
我试图将异常从特定的捕获块传递到更一般的捕获块.但是,它似乎无法正常工作.尝试以下操作时,我会遇到5​​00服务器错误.这甚至可能吗? 我意识到有轻松的解决方案,但是说:"嘿,我不想处理这个错误,让我们有更一般的例外处理程序来照顾它!" > try { //some soap stuff } catch (SoapFault $sf) { throw new Exception('Soap Fault'); } catch (Exception $e) { echo $e->getMessage(); } 解决方案 从技术上讲,这就是您要寻找的: try { try { //some soap stuff } catch (SoapFault $sf) { throw new Exception('Soap Fault'); } } catch (Exception $
0 2023-05-30
编程技术问答社区
在PHP中记录自定义异常的最佳实践
我有一个自定义异常(在5月的其他自定义异常中进一步扩展).我的项目需要记录发生的所有Customexceptions(及其所有决议).我有一个可以记录Customexception(以及其他任何内容)的记录仪.这样做的一种方法之一就是在处理以下时,明确记录了例外. try{ //some exception occur } catch(customeException $e) { $log->logException($e); $e->showMessage(); // or do anything that we have to do with the error. } 由于我们正在记录所有Customexceptions,另一种我能想到的方式,更新Customexception构造函数并记录构造函数内部的异常.这样,它可以确保记录所有的Customexception.但是,如果我们走上这条路,我的问题是: 如何将记录仪注入Customexc
0 2023-05-30
编程技术问答社区
如何在Laravel 5中处理异常和错误信息?
当我收到此错误时: QueryException in Connection.php行620:SQLSTATE [23000]:完整性 违反约束:1062重复条目 我可以用自己的闪存错误消息而不是: 处理它 哇,看起来好像出了问题 解决方案 您有两种处理异常的方法并显示自定义响应: 1)让框架为您处理: 如果您不自己处理异常,Laravel将在课堂上处理它们: App\Exceptions\Handler 在render方法中,您可以拦截框架上升的所有异常的渲染. 因此,如果您想在特定异常上升时特别做某事,则可以以这种方式修改该方法: public function render($request, Exception $e) { //check the type of the exception you are interested at if ($e instanceof QueryException) {
0 2023-05-30
编程技术问答社区
如何在Symfony2中捕获ParamConverter异常?
这是我得到的例外: 尽管至少预期一排,但没有发现查询的结果. 当数据库中找不到用户ID时,我基本上会得到该异常. 这是我的路线的样子: localhost/../user/18 和我的控制器中的代码: public function showAction(User $user){ // .. } 我知道我可以使用内核事件异常来处理此问题,但是有一种更简单的方法来捕获paramconverter生成的异常吗? 解决方案 在某些情况下,如果找不到对象,则手动抛出异常.您可以告诉Action Skip投掷异常,如果通过将默认值添加到param. 来找到实体. 示例: public function showUser(User $user = null) { if (empty($user)) { throw new CustomExceptionYouWant(); } ... }
0 2023-05-30
编程技术问答社区
抛出异常以返回服务器错误,例如404页面未找到,这样做不好吗?
我正在研究PHP框架,目前正在设计错误处理.根据我所阅读的内容,我只应使用异常情况.因此,当输入不正确的密码时,抛出例外是错误的. 当我想将服务器错误代码返回用户时,我是否应该避免使用异常(例如找不到404页)?如果是这样,我应该写自己的错误处理课吗? 解决方案 您的代码不应该引发与用户互动的异常,应该引发例外,以通知更高级别的代码级别. 现在,根据发生的事情,您可能需要使用某个HTTP状态代码响应.但是那时,您并没有抛出异常以触发服务器错误,而是 catch 例外并给用户提供适当的响应. 如果问题是在要求不存在的文章/博客/项目/等时应该发生的事情 - 好吧,如果有可能显示信息的代码,则可以显示信息以设置响应代码所有手段,不要使用异常. 如果您使用的是MVC框架,并且您的单个控制器可以设置响应代码,则让它们. ,如果最大的异常处理程序可以使用HTTP响应代码更好地向用户呈现错误消息,然后让它. 其他解决方案 例外不是控制流动机制. 其
0 2023-05-30
编程技术问答社区
Symfony 2.2 扩展 ExceptionController
This question is related to the following change (part of Symfony 2.2 release): 第1部分 在pre-2.2 symfony中,我覆盖ExceptionController显示一些自定义错误页面. 我通过: 做到了 parameters: twig.exception_listener.controller: My\CustomBundle\CustomExceptionController::showAction 现在,升级到2.2后,我再也无法做到这一点,因为生成异常时会抛出异常(无双关语): exceptionController :: __ construct()必须是twig_environment的实例,没有给出,in ... 因为ExceptionController现在是一项服务,我该如何覆盖它,我需要更改旧代码? 我在自定义类中所做的一
0 2023-05-30
编程技术问答社区
捕获一个致命的异常并继续
我知道,按照其定义,致命的例外应该杀死执行,不应被抑制,但这是问题. 我正在运行一个脚本,该脚本在大约10,000页的DB中刮擦,解析和存储.这需要几个小时,在极少数情况下(1000分之一),一个页面失败并引发了致命的例外. 目前,我正在这样做: for ($i=0;$iscrapeClassInfo($classObject,$termMap,$subjectMap); $class = $parser->parseClassInfo($classDOM);
0 2023-05-30
编程技术问答社区
PHP尝试捕捉异常
你好,我有这样的代码: try { // Here I call my external function do_some_work() } catch(Exception $e){} 问题是:如果do_some_work()有问题并产生错误,则此尝试捕获将隐藏错误? 解决方案 PHP中有两种类型的错误.有例外,有错误. try..catch将处理异常,但不会处理错误. 为了捕获PHP错误,您需要使用 函数. 简化事物的一种方法是在遇到错误时获得异常.如果您这样做,您需要仔细踩踏,因为它有可能造成各种麻烦,但这将是一种处理所有PHP错误的方法. 其他解决方案 如果do_some_work()引发异常,它将被捕获并忽略. 尝试/捕获构建体对标准PHP错误没有影响. 其他解决方案 产生致命错误 不,捕获无法捕获致命的错误.您甚至无法使用错误处理程序. 如果您想捕获所有其他错误,请查看 ErrorExce
0 2023-05-30
编程技术问答社区
为什么我应该在php中使用异常处理?
我已经编写了很长时间的PHP,但没有太多的PHP 5 ...我知道一段时间以来在PHP 5中处理异常,但从未真正研究过.快速Google之后,使用异常处理似乎相当毫无意义 - 我看不到仅使用一些(){}语句,也许是我自己的错误处理类或其他任何优点. . 必须有很多使用它的充分理由(我想?!),否则不会将其放入语言中(可能).谁能告诉我仅使用一堆if语句或交换声明或其他内容的好处? 解决方案 例外允许您区分不同类型的错误,并且也非常适合路由.例如... class Application { public function run() { try { // Start her up!! } catch (Exception $e) { // If Ajax request, send back status and message if ($this
0 2023-05-30
编程技术问答社区
有没有一种静态的方法可以在php中抛出异常?
是否有一种"静态"方式在PHP中抛出异常? 当MySQL查询失败时,我需要提出异常. 我尝试了: $re=@mysql_query( $query ) or throw new Exception(' Query Failed '); 但是它不起作用. ,我正在使用基于函数的功能在 php上的评论:例外手册 ,但我想知道是否有一种静态方法可以这样做,而无需上课. 解决方案 您将无法直接执行or throw new Exception();,因为throw是一种陈述,而不是表达式.由于or确实是一个运营商,因此它希望其操作数是表达式(评估某些值的事物). 您必须这样做: $re = mysql_query($query); if (!$re) { throw new Exception('Query Failed'); } 如果您尝试使用该php手动评论提出的throwException()函数,因为Webbiedave指出,该
0 2023-05-30
编程技术问答社区
PHP 5.5并尝试......最后
PHP 5.5在尝试/捕获块中添加了对finally的支持. Java允许您在没有捕获块的情况下创建一个尝试/捕获/最终阻止,因此您可以在异常时在本地清理,但是让异常本身传播呼叫堆栈,以便可以单独处理. try { // Do something that might throw an exception here } finally { // Do cleanup and let the exception propagate } 在当前版本的PHP版本中,您可以实现可以在例外进行清理并传播的东西,但是如果没有例外,则不会调用清理代码. try { // Do something that might throw an exception here } catch (Exception $e) { // Do cleanup and rethrow throw $e; } PHP 5.5将支持尝试/最终样式?我已经在寻找
0 2023-05-30
编程技术问答社区
如何显示Zend框架抛出的异常错误?
我正在使用Zend Framework,只是讨厌我似乎遇到数百个异常错误的事实,例如我尝试引用对象的不存在的属性,我的应用程序我的应用程序只是死去并崩溃.但是,我不知道在哪里可以看到这些错误或如何能够在屏幕上显示它们.我将显示错误设置为真实的错误,并将错误报告给E_ALL,但是当抛出错误时,我看到的只是一个空白页,直到显然发生错误或抛出异常之前,才呈现一个空白页. 解决方案 application_env环境变量的值是多少. ZF应用程序中的标准public/index.php执行以下操作: // Define application environment defined('APPLICATION_ENV') || define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV') : 'production')); 这意味着如果未设置Application_e
0 2023-05-30
编程技术问答社区
PDO "未捕获的异常'PDOException'...不能在其他未缓冲的查询活动时执行查询。考虑使用PDOStatement::fetchAll()。"
我知道这个问题已经很多次,但是我已经阅读了许多问题的答案,但仍然不明白为什么我会收到此错误: 致命错误:未闻名的异常" pdoexception"与消息 'SQLSTATE [HY000]:一般错误:2014年无法执行查询 其他未掩盖的查询是活动的.考虑使用 pdostatement :: fetchall().另外,如果您的代码仅是 要与MySQL相反,您可以通过设置启用查询缓冲 pdo :: mysql_attr_use_buffered_query属性.' 奇怪的第一件事是,我没有在Localhost(Wampserver)上遇到错误,但我确实在Web服务器上将其丢失.我的本地主机上的PHP版本为5.3.10,在我的Web服务器上是5.3.13. 我已经读到,当数据留在以前的查询中时,该错误的源头正在进行查询.对我而言,情况并非如此 - 我已经回应了所有数据,我知道一个事实,即在查询中返回的每一行都在获取. 话虽如此,我发现将我的一个查询之一更改为fetch
0 2023-05-30
编程技术问答社区
php中的异常...为什么没有人使用它们?
我是PHP的新手,当我正在寻找如何使用套接字的示例时,我注意到它们都不包含异常处理代码. 首先,我认为也许PHP没有例外...但是Google告诉我.有很多文章赞扬PHP中使用例外的文章(我来自Java&c#,我是一个转换的),但是在真实的例子中,似乎没有人在乎Trys/Catches. 是由于PHP在以前的版本中没有例外吗? 示例(伪代码): $fp = fsockopen($allTheNeededParams); if(!$fp){ //error handling } fwrite($fp, $out);//
0 2023-05-30
编程技术问答社区
现在所有的错误都是异常,PHP7上的set_error_handler()会怎么样?
在PHP5上,具有set_exception_handler()和set_error_handler()的定义. 都具有很大的意义. 但是,在php7上,所有(大多数?)错误现在是异常.那么,定义两个处理程序的意义何在,即使错误会被异常处理程序传递吗? 我在异常处理程序文档中看到了php7 new Error类上的注释,但是没有提及以下事实,但没有普通错误,但是Throwable s,在错误处理程序函数中. 自PHP 7以来,大多数错误都是通过抛出Error例外情况来报告的,该异常也将被处理程序捕获. Error和Exception实现了Throwable接口. [来源] 解决方案 Aaron Piotrowski(制作新的错误 - 外观系统的人)具有 的出色博客.我认为您需要了解的关键是此 在PHP 7中,当发生致命且可追回的错误(E_ERROR和E_RECOVERABLE_ERROR)时,将抛出一个例外,而不是停止执行脚本.在某些条件下,仍存在致命错误,
0 2023-05-30
编程技术问答社区
php自定义异常处理
我想自己处理我的PHP应用程序中的异常. 当我抛出异常时,我想传递在错误页面中使用的标题. 有人可以将我链接到一个好的教程,或者对异常处理方式的清晰解释(例如,如何知道您正在处理什么样的例外,等等. . 解决方案 官方文档是一个开始的好地方 - http://php. net/harual/en/enlaging.exceptions.php . 如果这只是您要捕获的消息,您将在以下操作; try{ throw new Exception("This is your error message"); }catch(Exception $e){ print $e->getMessage(); } 如果要捕获特定错误,则使用: try{ throw new SQLException("SQL error message"); }catch(SQLException $e){ print "SQL Error: ".$e-
0 2023-05-30
编程技术问答社区