我习惯了Zend Framework,当你编写自己的组件时,你会创建自己的异常文件,但在每个文件的基础上,你会有这样的结构:
Zend/View/Exception.php
Zend/View/Helper/Exception.php
Zend/View/Renderer/Exception.php
等。
我可以,我也使用Doctrine2和异常以不同的方式“存储”
类似于(以Zend的方式)
在Zend/View/Exception.php中
class Exception {
public static function invalidArguement() {
return ne
我有一个PHP函数,它调用一个PL/SQL包,该包可以抛出许多已知的异常(即用户异常),我可以在PHP中捕获这些异常并对其执行操作。问题是,尽管在PHP中捕获了异常,但我在PHP日志文件中收到了一条警告,其中包含来自PL/SQL异常的堆栈跟踪:
PHP Warning: oci_execute(): ORA-20001: Something isn't valid
ORA-234565: at "MY.PACKAGE", line 234
ORA-923485: at "MY.PACKAGE", line 123
我如何抑制这些保监处的警告?我不想隐藏
我在PHP中有一个启动异常的函数,异常之后的代码永远不会执行,无论异常是否被抛出。
if ($a == 1) throw new Exception("Message");
echo "Dose not execute for $a == 0";
我知道当异常发生时,之后的代码将不会到达,但在我的示例中,当$a == 0没有抛出异常时,甚至echo也不会被执行。
谢谢,我希望有人能发现我的PHP是怎么回事,顺便说一下,它是5.3。
我的目标是非常高的代码覆盖率,并希望要么覆盖异常类,要么将它们排除在代码覆盖报告之外。
示例代码
class My_DataException extends Exception
{}
class Foo
{
function __construct() { throw new My_DataException('see?'); }
}
如何在My_DataException上(在库/My/DataException.php中)获得代码覆盖率,或者如何将该文件排除在代码覆盖率报告中?我不喜欢使用注释方法(@codeCoverageIgnore或类似的方法)。
我的php
我正在使用Laravel 5.1创建一个基于控制台的应用程序。在开发过程中,我希望在发生错误时显示异常跟踪。但是,即使我在php artisan中使用-v -vv或-vvv选项,我也无法获得自定义命令的异常跟踪。我在我的.env中设置了APP_DEBUG=true,仍然没有异常跟踪。
php artisan some:unknowncommand的输出为:
[InvalidArgumentException]
There are no commands defined in the "some" namespace.
PHP Error[2]: ftp_login(): Login authentication failed
in file /mnt/2vertex/Repos/gold/protected/components/data-adapters/FtpDataAdapter.php at line 37
#0 /mnt/2vertex/Repos/gol/protected/components/data-adapters/FtpDataAdapter.php(37): ftp_login()
....
....
.... some stack info
这是异常
我的script_a.php
try {
Class1::tryThis();
}
catch (Exception $e) {
// Do stuff here to show the user an error occurred
}
Class1::tryThis()有如下内容:
public function tryThis() {
Class2::tryThat();
self::logSuccessfulEvent();
}
问题是Class2::tryThat()可以抛出异常。
如果它确实抛出了一个异常,那么self::logSuccessfulEv
在我自己的测试中,我无法使用类似系统的命令来阻止异常.只是好奇是否有办法让这一切发生?
test1.php:
<?php
try {
// None of these (which throw an exception)
// allow exception to be caught here
passthru("php -f test2.php");
system("php -f test2.php");
exec("php -f test2.php");
}