我正在尝试在我的一个课程中实现PHP5的类型提示,
class ClassA {
public function method_a (ClassB $b)
{}
}
class ClassB {}
class ClassWrong{}
正确用法:
$a = new ClassA;
$a->method_a(new ClassB);
产生错误:
$a = new ClassA;
$a->method_a(new ClassWrong);
可捕获的致命错误:传递给ClassA :: method_a()的参数1必须是ClassB的实例,给定ClassWrong的实例…
是否有可能捕获到该错误(因为它说“可捕获”)?如果是的话,如何?
更新:这不再是php
7中可捕获的致命错误。相反,抛出了“异常”。不是从Exception而是Error派生的“exception”(用引号引起来);它仍然是Throwable,可以使用常规的try-catch块进行处理
例如
<?php
class ClassA {
public function method_a (ClassB $b) { echo 'method_a: ', get_class($b), PHP_EOL; }
}
class ClassWrong{}
class ClassB{}
class ClassC extends ClassB {}
foreach( array('ClassA', 'ClassWrong', 'ClassB', 'ClassC') as $cn ) {
try{
$a = new ClassA;
$a->method_a(new $cn);
}
catch(Error $err) {
echo "catched: ", $err->getMessage(), PHP_EOL;
}
}
echo 'done.';
版画
catched: Argument 1 passed to ClassA::method_a() must be an instance of ClassB, instance of ClassA given, called in [...]
catched: Argument 1 passed to ClassA::method_a() must be an instance of ClassB, instance of ClassWrong given, called in [...]
method_a: ClassB
method_a: ClassC
done.
php7之前版本的旧答案:
http :
//docs.php.net/errorfunc.constants 说:
E_RECOVERABLE_ERROR(整数)
可捕获的致命错误。它表明发生了可能是危险的错误,但没有使引擎处于不稳定状态。如果错误未由用户定义的句柄捕获另请参见[set_error_handler(),则应用程序将中止,因为它是E_ERROR。
例如
function myErrorHandler($errno, $errstr, $errfile, $errline) {
if ( E_RECOVERABLE_ERROR===$errno ) {
echo "'catched' catchable fatal error\n";
return true;
}
return false;
}
set_error_handler('myErrorHandler');
class ClassA {
public function method_a (ClassB $b) {}
}
class ClassWrong{}
$a = new ClassA;
$a->method_a(new ClassWrong);
echo 'done.';
版画
'catched' catchable fatal error
done.
编辑:但是您可以“使其”成为您可以使用try-catch块处理的异常
function myErrorHandler($errno, $errstr, $errfile, $errline) {
if ( E_RECOVERABLE_ERROR===$errno ) {
echo "'catched' catchable fatal error\n";
throw new ErrorException($errstr, $errno, 0, $errfile, $errline);
// return true;
}
return false;
}
set_error_handler('myErrorHandler');
class ClassA {
public function method_a (ClassB $b) {}
}
class ClassWrong{}
try{
$a = new ClassA;
$a->method_a(new ClassWrong);
}
catch(Exception $ex) {
echo "catched\n";
}
echo 'done.';
为什么我在尝试运行时,在Laravel 5.1中遇到了PHP可捕获的致命错误? 可捕获的致命错误:传递给Illumate\Routing\UrlGenerator::__construct()的参数2必须是Illumate\Http\Request的实例,空给定,在第62行和第62行的C:\xampp\htdocs\kincert2\本地\供应商\laravel\框架\src\Illumate\R
我现在必须学习通过fire base编写移动应用程序web服务。我点击了这个链接:https://firebase-php.readthedocs.io/en/stable/ 在我的核心网站中,我创建web服务文件夹,然后创建我的fire。php文件。这个文件代码在这里, 我得打电话给我的支持档案:https://github.com/kreait/firebase-php/ 但我还是得到了一个:
我得到这个错误。我创建了一个按钮来更新表。当我点击按钮时,我得到一个错误。如何修复它? 致命错误:Uncaught ArgumentCounter错误:函数personel::update_form(),0的参数太少,在C:\xampp\htdocs\warehouse\panel\system\core\CodeIgniter中传递。php在第360行,C:\xampp\htdocs\wareh
问题内容: 我正在使用PHP函数将数据从本地计算机发布到Web服务器。我的代码如下: 不幸的是,我无法捕获任何错误,例如404、500或网络故障。那么,我如何得知数据没有发布到远程或从远程检索呢? 问题答案: 您可以使用该功能检测是否有错误。例如:
我有这个MVC文件夹结构: 现在,在ProfileController.php中,我有: 在usermodel.php中,我有: 并使用Composer Psr4 I自动加载文件: 现在,当我需要路由我的URL时,我会采取行动: 我看到这个错误: >致命错误:未捕获错误:在C:\XAMPP\HTDOCS\CMS\Application\Catalog\Controller\ProfileContr
我在进行贝宝支付时出现了经验错误。 致命错误:未捕获异常“PayPal\exception\PayPalConnectionException”,消息为“访问https://api.sandbox.paypal.com/v1/payments/payment时获得Http响应代码400”。在C:\xampp\htdocs\paypal\workload\third_party\vendor\pay