/** * Constructor. * * @param string $message [optional] Exception message. Leave empty to autogenerate a message. Default: `""`. * @param integer $code [optional] Exception code. Default: `0`. * @param Exception $previous [optional] Previous exception. Default: `null`. */ public function __construct($message = '', $code = 0, Base_Exception $previous = null) { if (empty($message)) { $trace = Debugger::getPrettyTrace(debug_backtrace()); if (isset($trace[1])) { $message = 'Function "' . $trace[1]['function'] . '" defined in "' . $trace[1]['file'] . '" has not been fully implemented yet.'; } } parent::__construct($message, $code, $previous); }
/** * Constructor. * * @param string $expected Expected type. * @param mixed $actual Actual argument given. * @param int $number [optional] Argument number. * @param bool $hideCaller [optional] Should the function that has thrown this exception be hidden? Default: `false`. */ public function __construct($expected, $actual, $number = 1, $hideCaller = false) { $trace = Debugger::getPrettyTrace(debug_backtrace()); $type = Debugger::getType($actual); $type = $type === 'string' ? $type . ' ("' . StringUtils::truncate($actual, 50) . '")' : $type; if (!$hideCaller && isset($trace[1])) { $message = $trace[1]['function'] . ' expected argument ' . $number . ' to be ' . $expected . ', ' . $type . ' given.'; } else { $message = 'Expected argument ' . $number . ' to be ' . $expected . ', ' . $type . ' given.'; } parent::__construct($message); }
public function testGetPrettyTrace() { $prettyTrace = Debugger::getPrettyTrace(debug_backtrace()); $this->assertInternalType('array', $prettyTrace); if (!empty($prettyTrace)) { foreach ($prettyTrace as $item) { $this->assertArrayHasKey('function', $item); $this->assertArrayHasKey('file', $item); $this->assertArrayHasKey('arguments', $item); } } }