gpt4 book ai didi

php - 如何使PHP处理函数的重载错误?

转载 作者:行者123 更新时间:2023-12-03 07:55:40 25 4
gpt4 key购买 nike

假设我有一个名为Form的类。此类使用魔术方法__call()向自身添加字段,如下所示:

<?php
class Form {

private $_fields = array();

public function __call($name, $args) {

// Only allow methods which begin with 'add'
if ( preg_match('/^add/', $name) ) {

// Add a new field

} else {

// PHP throw the default 'undefined method' error

}

}

}

我的问题是我无法弄清楚如何使PHP以默认方式处理对未定义方法的调用。当然,可以通过许多方式来模仿默认行为,例如,我现在使用以下代码:
trigger_error('Call to undefined method ' . __CLASS__ . '::' . $function, E_USER_ERROR);

但是我不喜欢这种解决方案,因为错误本身或其级别将来可能会更改,因此有没有更好的方法来用PHP处理呢?

更新
似乎我的问题有点含糊,因此请澄清更多...我如何使PHP抛出未定义方法的默认错误,而无需提供错误及其级别?以下代码在PHP中不起作用,但这是我正在尝试做的事情:
// This won't work because my class is not a subclass. If it were, the parent would have             
// handled the error
parent::__call($name, $args);

// or is there a PHP function like...
trigger_default_error(E_Undefined_Method);

如果有人熟悉Ruby,可以通过调用 super中的 method_missing方法来实现。如何在PHP中复制它?

最佳答案

使用异常,这就是它们的用途

public function __call($name, $args) {
// Only allow methods which begin with 'add'
if ( preg_match('/^add/', $name) ) {
// Add a new field
} else {
throw new BadMethodCallException('Call to undefined method ' . __CLASS__ . '::' . $name);
}
}

那么这很容易捕获
try {
$form->foo('bar');
} catch (BadMethodCallException $e) {
// exception caught here
$message = $e->getMessage();
}

关于php - 如何使PHP处理函数的重载错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7115412/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com