user_error() 是PHP内置的错误处理函数,它是trigger_error()函数的别名。这个函数用于生成用户级别的错误、警告、通知或弃用警告,与trigger_error()功能完全相同。
user_error()是trigger_error()的完全别名,两个函数在功能、参数、返回值和使用方式上完全相同。使用哪个函数完全取决于个人偏好。
user_error()和trigger_error()功能相同,但在代码中建议保持一致性,选择其中一个并坚持使用,以保持代码风格统一。
user_error($message, $type)等同于trigger_error($message, $type)。你可以将代码中的user_error()调用直接替换为trigger_error(),反之亦然。
bool user_error(string $error_msg[, int $error_type = E_USER_NOTICE])
如果指定了无效的错误类型,函数返回false,否则返回true。
user_error($msg, $type) ≡ trigger_error($msg, $type)
| 参数 | 类型 | 默认值 | 描述 |
|---|---|---|---|
| $error_msg | string | 必填 | 错误消息。长度限制为1024字节。超过此长度的字符将被截断。 |
| $error_type | int | E_USER_NOTICE |
错误类型。必须是以下常量之一:
|
bool - 如果指定了无效的错误类型,函数返回false,否则返回true。
trigger_error()的完全别名user_error("这是一个用户错误", E_USER_ERROR);
user_error("这是一个警告", E_USER_WARNING);
user_error("这是一个通知"); // 默认E_USER_NOTICE
trigger_error("这是一个用户错误", E_USER_ERROR);
trigger_error("这是一个警告", E_USER_WARNING);
trigger_error("这是一个通知"); // 默认E_USER_NOTICE
user_error()的使用,但在新代码中建议使用trigger_error(),因为它更常用且语义更清晰。
演示如何使用user_error()触发不同类型的用户错误:
<?php
echo "<h4>测试user_error()基本用法:</h4>";
// 1. 触发用户通知(默认)
$result = user_error("这是一个用户通知", E_USER_NOTICE);
echo "触发通知结果: " . ($result ? "成功" : "失败") . "<br>";
// 2. 触发用户警告
user_error("这是一个用户警告", E_USER_WARNING);
// 3. 触发用户弃用警告
user_error("这是一个用户弃用警告", E_USER_DEPRECATED);
// 4. 触发用户错误
echo "<div class='alert alert-warning'>";
echo "注意:E_USER_ERROR通常是致命错误,如果没有自定义错误处理器,脚本会终止。";
echo "</div>";
// 设置自定义错误处理器来处理E_USER_ERROR
set_error_handler(function($errno, $errstr) {
echo "<div style='background:#f8d7da; padding:10px; margin:5px; border:1px solid #f5c6cb;'>";
echo "自定义错误处理器捕获: " . htmlspecialchars($errstr);
echo "</div>";
return true; // 阻止PHP默认处理器
}, E_USER_ERROR);
// 现在可以安全触发用户错误
user_error("这是一个用户错误,但被自定义处理器捕获", E_USER_ERROR);
// 恢复默认错误处理器
restore_error_handler();
// 5. 使用默认错误类型(E_USER_NOTICE)
user_error("这是一个使用默认类型的通知");
演示user_error()和trigger_error()可以互换使用:
<?php
// 验证函数
function validateInput($input) {
if (empty($input)) {
// 使用user_error
user_error("输入不能为空", E_USER_WARNING);
return false;
}
if (strlen($input) < 3) {
// 使用trigger_error
trigger_error("输入至少需要3个字符", E_USER_WARNING);
return false;
}
return true;
}
// 数据处理函数
function processData($data) {
if (!is_array($data)) {
// 混合使用两种方式
user_error("数据必须是数组", E_USER_ERROR);
return false;
}
if (empty($data)) {
trigger_error("数据数组不能为空", E_USER_WARNING);
return false;
}
// 处理数据...
trigger_error("数据处理开始", E_USER_NOTICE);
foreach ($data as $item) {
if (!is_numeric($item)) {
user_error("发现非数字数据: " . $item, E_USER_WARNING);
}
}
user_error("数据处理完成", E_USER_NOTICE);
return true;
}
echo "<h4>测试混合使用user_error()和trigger_error():</h4>";
// 设置错误处理器
set_error_handler(function($errno, $errstr, $errfile, $errline) {
$types = [
E_USER_ERROR => '错误',
E_USER_WARNING => '警告',
E_USER_NOTICE => '通知',
E_USER_DEPRECATED => '弃用警告',
];
$typeName = $types[$errno] ?? "未知类型({$errno})";
echo "<div style='background:#e7f3ff; padding:10px; margin:5px; border-left:4px solid #b3d7ff;'>";
echo "<strong>[{$typeName}]</strong> " . htmlspecialchars($errstr);
echo "</div>";
if ($errno === E_USER_ERROR) {
return true; // 阻止脚本终止
}
return false;
});
// 测试验证函数
echo "<h5>测试validateInput函数:</h5>";
validateInput(""); // 使用user_error
validateInput("ab"); // 使用trigger_error
validateInput("valid input");
// 测试数据处理函数
echo "<h5>测试processData函数:</h5>";
processData("invalid"); // 使用user_error
processData([]); // 使用trigger_error
processData([1, 2, "abc", 4]); // 混合使用
restore_error_handler();
演示如何在代码库中处理user_error()和trigger_error()的向后兼容性:
<?php
/**
* 向后兼容的错误触发工具类
*
* 这个类提供了统一的方式来触发用户错误,可以透明地处理
* user_error()和trigger_error()的使用
*/
class ErrorTrigger {
// 配置使用哪个函数
private static $useUserError = false;
/**
* 配置使用user_error还是trigger_error
*/
public static function useUserError($use = true) {
self::$useUserError = (bool)$use;
}
/**
* 触发错误
*/
public static function error($message, $type = E_USER_NOTICE) {
if (self::$useUserError) {
return user_error($message, $type);
} else {
return trigger_error($message, $type);
}
}
/**
* 触发错误(别名)
*/
public static function trigger($message, $type = E_USER_NOTICE) {
return self::error($message, $type);
}
/**
* 批量转换代码中的user_error为trigger_error
*/
public static function convertCode($code) {
// 将user_error( 替换为 trigger_error(
$converted = preg_replace(
'/\buser_error\s*\(\s*/i',
'trigger_error(',
$code
);
return $converted;
}
}
/**
* 自定义错误触发函数
*
* 在旧代码库中,可能已经大量使用了user_error
* 可以创建包装函数来统一处理
*/
function my_error($message, $type = E_USER_NOTICE) {
// 统一使用trigger_error,但保持对user_error的引用
return trigger_error($message, $type);
}
// 使用示例
echo "<h4>向后兼容性处理示例:</h4>";
// 1. 使用ErrorTrigger类
echo "<h5>1. 使用ErrorTrigger类:</h5>";
// 配置使用trigger_error
ErrorTrigger::useUserError(false);
ErrorTrigger::error("使用trigger_error触发错误", E_USER_WARNING);
// 配置使用user_error
ErrorTrigger::useUserError(true);
ErrorTrigger::error("使用user_error触发错误", E_USER_NOTICE);
// 2. 使用自定义函数
echo "<h5>2. 使用自定义my_error函数:</h5>";
my_error("通过自定义函数触发错误", E_USER_DEPRECATED);
// 3. 代码转换示例
echo "<h5>3. 代码转换示例:</h5>";
$oldCode = '<?php
// 旧代码使用user_error
function oldFunction($param) {
if ($param === null) {
user_error("参数不能为空", E_USER_WARNING);
return false;
}
return $param * 2;
}
user_error("测试消息");
';
$newCode = ErrorTrigger::convertCode($oldCode);
echo "<strong>原始代码:</strong>";
echo "<pre style='background:#f5f5f5; padding:10px;'>" . htmlspecialchars($oldCode) . "</pre>";
echo "<strong>转换后代码:</strong>";
echo "<pre style='background:#e7f3ff; padding:10px;'>" . htmlspecialchars($newCode) . "</pre>";
echo "<div class='alert alert-info'>";
echo "通过ErrorTrigger类,可以在整个项目中统一错误触发方式,便于维护和迁移。";
echo "</div>";
演示在实际项目中如何使用user_error()和如何迁移到trigger_error():
<?php
// 模拟一个旧的项目代码库,使用user_error
class LegacyValidator {
/**
* 验证电子邮件地址
*/
public static function validateEmail($email) {
if (empty($email)) {
user_error("电子邮件地址不能为空", E_USER_WARNING);
return false;
}
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
user_error("无效的电子邮件地址: " . $email, E_USER_WARNING);
return false;
}
return true;
}
/**
* 验证密码强度
*/
public static function validatePassword($password) {
if (strlen($password) < 8) {
user_error("密码必须至少8个字符", E_USER_WARNING);
return false;
}
return true;
}
}
// 新版本,使用trigger_error
class ModernValidator {
/**
* 验证电子邮件地址
*/
public static function validateEmail($email) {
if (empty($email)) {
trigger_error("电子邮件地址不能为空", E_USER_WARNING);
return false;
}
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
trigger_error("无效的电子邮件地址: " . $email, E_USER_WARNING);
return false;
}
return true;
}
/**
* 验证密码强度
*/
public static function validatePassword($password) {
if (strlen($password) < 8) {
trigger_error("密码必须至少8个字符", E_USER_WARNING);
return false;
}
return true;
}
}
// 兼容层,允许逐渐迁移
class CompatValidator {
private static $useModern = false;
public static function useModern($use = true) {
self::$useModern = $use;
}
public static function validateEmail($email) {
if (self::$useModern) {
return ModernValidator::validateEmail($email);
} else {
return LegacyValidator::validateEmail($email);
}
}
public static function validatePassword($password) {
if (self::$useModern) {
return ModernValidator::validatePassword($password);
} else {
return LegacyValidator::validatePassword($password);
}
}
}
// 使用示例
echo "<h4>实际项目迁移示例:</h4>";
// 设置错误处理器
set_error_handler(function($errno, $errstr) {
echo "<div style='background:#fff3cd; padding:10px; margin:5px; border:1px solid #ffeaa7;'>";
echo htmlspecialchars($errstr);
echo "</div>";
return true;
});
// 阶段1:使用旧版本
echo "<h5>阶段1:使用旧版本(user_error):</h5>";
CompatValidator::useModern(false);
CompatValidator::validateEmail("");
CompatValidator::validatePassword("123");
// 阶段2:迁移到新版本
echo "<h5>阶段2:迁移到新版本(trigger_error):</h5>";
CompatValidator::useModern(true);
CompatValidator::validateEmail("invalid-email");
CompatValidator::validatePassword("strongpassword123");
// 分析代码库中user_error的使用
echo "<h5>分析代码库:</h5>";
function analyzeCodebaseForUserError($directory) {
$userErrorCount = 0;
$triggerErrorCount = 0;
// 遍历目录查找PHP文件
$iterator = new RecursiveIteratorIterator(
new RecursiveDirectoryIterator($directory)
);
foreach ($iterator as $file) {
if ($file->isFile() && $file->getExtension() === 'php') {
$content = file_get_contents($file->getPathname());
// 统计user_error出现次数
$userErrorCount += substr_count($content, 'user_error(');
// 统计trigger_error出现次数
$triggerErrorCount += substr_count($content, 'trigger_error(');
}
}
return [
'user_error_count' => $userErrorCount,
'trigger_error_count' => $triggerErrorCount,
'total' => $userErrorCount + $triggerErrorCount,
'user_error_percentage' => $total > 0 ? round($userErrorCount / $total * 100, 2) : 0,
];
}
// 模拟分析结果
$analysis = [
'user_error_count' => 45,
'trigger_error_count' => 12,
'total' => 57,
'user_error_percentage' => 78.95,
];
echo "<div style='background:#f8f9fa; padding:15px; border:1px solid #ddd;'>";
echo "<h6>代码分析结果:</h6>";
echo "<ul>";
echo "<li>user_error() 使用次数: " . $analysis['user_error_count'] . "</li>";
echo "<li>trigger_error() 使用次数: " . $analysis['trigger_error_count'] . "</li>";
echo "<li>总错误触发次数: " . $analysis['total'] . "</li>";
echo "<li>user_error() 占比: " . $analysis['user_error_percentage'] . "%</li>";
echo "</ul>";
if ($analysis['user_error_percentage'] > 50) {
echo "<div class='alert alert-warning'>";
echo "代码库中主要使用user_error(),建议制定迁移计划。";
echo "</div>";
} else {
echo "<div class='alert alert-success'>";
echo "代码库中主要使用trigger_error(),符合现代PHP实践。";
echo "</div>";
}
echo "</div>";
演示user_error()和trigger_error()的历史背景和演变:
<?php
/**
* PHP错误处理的历史演变
*
* 这个示例展示了PHP错误处理的发展历程,
* 包括user_error和trigger_error的引入
*/
class PhpErrorHistory {
public static function getTimeline() {
return [
[
'version' => 'PHP 3',
'year' => 1998,
'features' => '基本的错误处理,没有用户错误触发功能',
'notes' => '错误处理功能有限',
],
[
'version' => 'PHP 4.0.0',
'year' => 2000,
'features' => '引入user_error()函数',
'notes' => '第一个允许用户触发错误的函数',
],
[
'version' => 'PHP 4.0.1',
'year' => 2000,
'features' => '引入trigger_error()作为user_error的别名',
'notes' => '提供更语义化的函数名',
],
[
'version' => 'PHP 5.0.0',
'year' => 2004,
'features' => '改进的错误处理,异常处理',
'notes' => '引入了异常处理机制',
],
[
'version' => 'PHP 5.4.0',
'year' => 2012,
'features' => '增加E_USER_DEPRECATED常量',
'notes' => '可以触发用户级别的弃用警告',
],
[
'version' => 'PHP 7.0.0',
'year' => 2015,
'features' => '错误处理改进,Throwable接口',
'notes' => '统一错误和异常处理',
],
];
}
public static function displayTimeline() {
$timeline = self::getTimeline();
$html = "<div class='timeline'>";
foreach ($timeline as $item) {
$html .= "<div style='border-left:3px solid #007bff; padding-left:15px; margin-bottom:20px;'>";
$html .= "<h5 style='margin-bottom:5px;'>" . $item['version'] . " (" . $item['year'] . ")</h5>";
$html .= "<p style='margin-bottom:5px;'><strong>功能:</strong> " . $item['features'] . "</p>";
$html .= "<p style='color:#666; font-size:0.9em;'>" . $item['notes'] . "</p>";
$html .= "</div>";
}
$html .= "</div>";
return $html;
}
public static function compareFunctions() {
return [
'user_error' => [
'introduced' => 'PHP 4.0.0',
'purpose' => '触发用户级别的错误',
'common_use' => '较少使用,旧代码中可能看到',
'recommendation' => '在新代码中使用trigger_error',
],
'trigger_error' => [
'introduced' => 'PHP 4.0.1',
'purpose' => 'user_error的别名,语义更清晰',
'common_use' => '更常用,现代PHP代码的标准',
'recommendation' => '推荐在新项目中使用',
],
];
}
}
// 使用示例
echo "<h4>PHP错误处理历史:</h4>";
echo PhpErrorHistory::displayTimeline();
echo "<h4>函数对比:</h4>";
$comparison = PhpErrorHistory::compareFunctions();
echo "<table class='table table-bordered'>";
echo "<thead><tr><th>函数</th><th>引入版本</th><th>用途</th><th>使用情况</th><th>推荐</th></tr></thead>";
echo "<tbody>";
foreach ($comparison as $func => $info) {
echo "<tr>";
echo "<td><code>" . $func . "()</code></td>";
echo "<td>" . $info['introduced'] . "</td>";
echo "<td>" . $info['purpose'] . "</td>";
echo "<td>" . $info['common_use'] . "</td>";
echo "<td>" . $info['recommendation'] . "</td>";
echo "</tr>";
}
echo "</tbody></table>";
// 演示不同PHP版本中的行为
echo "<h4>不同PHP版本中的行为:</h4>";
$phpVersion = phpversion();
echo "<div class='alert alert-info'>";
echo "当前PHP版本: " . $phpVersion . "<br>";
// 检查函数是否存在
if (function_exists('user_error')) {
echo "✓ user_error() 函数存在<br>";
} else {
echo "✗ user_error() 函数不存在<br>";
}
if (function_exists('trigger_error')) {
echo "✓ trigger_error() 函数存在<br>";
} else {
echo "✗ trigger_error() 函数不存在<br>";
}
// 检查函数是否为别名
if (function_exists('user_error') && function_exists('trigger_error')) {
// 通过反射检查
$userErrorReflection = new ReflectionFunction('user_error');
$triggerErrorReflection = new ReflectionFunction('trigger_error');
if ($userErrorReflection->getFileName() === $triggerErrorReflection->getFileName() &&
$userErrorReflection->getStartLine() === $triggerErrorReflection->getStartLine()) {
echo "✓ user_error() 是 trigger_error() 的完全别名";
} else {
echo "✗ user_error() 和 trigger_error() 不是同一个函数";
}
}
echo "</div>";
演示从user_error()迁移到trigger_error()的最佳实践:
<?php
/**
* 从user_error迁移到trigger_error的指南
*/
class MigrationGuide {
/**
* 迁移步骤
*/
public static function getMigrationSteps() {
return [
[
'step' => 1,
'title' => '代码分析',
'description' => '分析代码库中user_error的使用情况',
'code' => '// 查找所有user_error调用
grep -r "user_error" . --include="*.php"',
],
[
'step' => 2,
'title' => '创建兼容层',
'description' => '创建兼容函数,允许逐步迁移',
'code' => 'function my_error($msg, $type = E_USER_NOTICE) {
// 临时使用user_error,稍后改为trigger_error
return user_error($msg, $type);
}',
],
[
'step' => 3,
'title' => '批量替换',
'description' => '使用工具批量替换user_error为trigger_error',
'code' => '// 使用sed命令替换
sed -i \'s/user_error(/trigger_error(/g\' *.php
// 或使用PHP脚本替换
$code = str_replace("user_error(", "trigger_error(", $code);',
],
[
'step' => 4,
'title' => '测试验证',
'description' => '运行测试确保功能正常',
'code' => '// 运行单元测试
phpunit tests/
// 手动测试关键功能',
],
[
'step' => 5,
'title' => '清理代码',
'description' => '移除兼容层,确保只使用trigger_error',
'code' => '// 移除my_error函数,直接使用trigger_error
trigger_error("错误消息", E_USER_WARNING);',
],
];
}
/**
* 显示迁移步骤
*/
public static function displayMigrationSteps() {
$steps = self::getMigrationSteps();
$html = "<div class='migration-steps'>";
foreach ($steps as $step) {
$html .= "<div style='border:1px solid #dee2e6; border-radius:5px; padding:15px; margin-bottom:15px;'>";
$html .= "<h5>步骤 {$step['step']}: {$step['title']}</h5>";
$html .= "<p>{$step['description']}</p>";
$html .= "<pre style='background:#f8f9fa; padding:10px; border-radius:3px;'>" . htmlspecialchars($step['code']) . "</pre>";
$html .= "</div>";
}
$html .= "</div>";
return $html;
}
/**
* 获取推荐实践
*/
public static function getBestPractices() {
return [
[
'practice' => '一致性',
'description' => '在整个项目中保持一致性,选择trigger_error或user_error并坚持使用',
'example' => '// 好:整个项目使用trigger_error
trigger_error("错误消息", E_USER_WARNING);
// 不好:混合使用
user_error("错误1", E_USER_WARNING);
trigger_error("错误2", E_USER_WARNING);',
],
[
'practice' => '语义清晰',
'description' => 'trigger_error语义更清晰,明确表示"触发错误"',
'example' => '// trigger_error语义更清晰
trigger_error("文件未找到", E_USER_ERROR);
// user_error语义稍差
user_error("文件未找到", E_USER_ERROR);',
],
[
'practice' => '现代PHP',
'description' => '现代PHP项目和框架主要使用trigger_error',
'example' => '// 现代框架如Laravel、Symfony使用trigger_error
// 或使用异常处理
throw new InvalidArgumentException("参数无效");',
],
[
'practice' => '文档说明',
'description' => '在项目文档中说明错误处理策略',
'example' => '/**
* 项目错误处理规范
*
* 1. 使用trigger_error触发用户错误
* 2. 严重错误使用E_USER_ERROR
* 3. 非致命问题使用E_USER_WARNING
* 4. 信息性消息使用E_USER_NOTICE
*/',
],
];
}
}
// 使用示例
echo "<h4>从user_error迁移到trigger_error的步骤:</h4>";
echo MigrationGuide::displayMigrationSteps();
echo "<h4>最佳实践:</h4>";
$practices = MigrationGuide::getBestPractices();
foreach ($practices as $practice) {
echo "<div style='background:#f8f9fa; padding:15px; margin-bottom:15px; border-left:4px solid #007bff;'>";
echo "<h5>" . $practice['practice'] . "</h5>";
echo "<p>" . $practice['description'] . "</p>";
echo "<pre style='background:#e9ecef; padding:10px; border-radius:3px; font-size:0.9em;'>" . htmlspecialchars($practice['example']) . "</pre>";
echo "</div>";
}
// 决策工具
echo "<h4>决策工具:使用user_error还是trigger_error?</h4>";
function shouldUseTriggerError($context) {
$reasons = [];
if ($context['is_new_project']) {
$reasons[] = "新项目应使用trigger_error";
}
if ($context['team_preference'] === 'trigger_error') {
$reasons[] = "团队偏好trigger_error";
}
if ($context['framework'] && in_array($context['framework'], ['Laravel', 'Symfony', 'Yii', 'CodeIgniter'])) {
$reasons[] = "主流框架使用trigger_error";
}
if ($context['php_version'] >= 7.0) {
$reasons[] = "PHP 7+ 项目应使用trigger_error";
}
return [
'recommendation' => count($reasons) > 0 ? 'trigger_error' : 'user_error',
'reasons' => $reasons,
];
}
// 示例上下文
$context = [
'is_new_project' => true,
'team_preference' => 'trigger_error',
'framework' => 'Laravel',
'php_version' => 7.4,
];
$decision = shouldUseTriggerError($context);
echo "<div class='alert " . ($decision['recommendation'] === 'trigger_error' ? 'alert-success' : 'alert-warning') . "'>";
echo "<strong>推荐使用:</strong> " . $decision['recommendation'] . "()<br>";
if (!empty($decision['reasons'])) {
echo "<strong>原因:</strong><ul>";
foreach ($decision['reasons'] as $reason) {
echo "<li>" . $reason . "</li>";
}
echo "</ul>";
}
echo "</div>";
没有区别。user_error()是trigger_error()的完全别名。两个函数在功能、参数、返回值和使用方式上完全相同。
唯一的区别是函数名。历史上,user_error()在PHP 4.0.0中引入,trigger_error()在PHP 4.0.1中作为别名引入。
推荐使用trigger_error(),原因如下:
trigger_error更明确地表示"触发错误"trigger_error()set_error_handler)命名风格一致trigger_error()如果你正在维护旧代码,可以继续使用user_error(),但在新代码中建议使用trigger_error()。
迁移步骤如下:
grep -r "user_error" . --include="*.php"查找所有使用user_error(为trigger_error(也可以使用PHP脚本进行批量替换:
$code = str_replace('user_error(', 'trigger_error(', $code);
目前没有计划从PHP中移除user_error()函数。它是trigger_error()的别名,PHP核心团队通常不会移除这样的别名,以避免破坏向后兼容性。
然而,由于trigger_error()更常用且语义更清晰,user_error()的使用正在减少。在新项目中,建议使用trigger_error()。
使用用户错误(trigger_error()或user_error())的场景:
使用异常的场景:
在实际项目中,可以结合使用两者,但需要注意保持一致性。
在新项目中使用trigger_error(),保持与现代PHP实践一致:
// 推荐
trigger_error("文件未找到", E_USER_ERROR);
// 不推荐(除非维护旧代码)
user_error("文件未找到", E_USER_ERROR);
在整个项目中保持错误触发方式的一致性:
// 好:整个项目使用同一种方式
class Validator {
public function validate($input) {
if (empty($input)) {
trigger_error("输入不能为空", E_USER_WARNING);
return false;
}
return true;
}
}
// 不好:混合使用
class AnotherValidator {
public function validate($input) {
if (empty($input)) {
user_error("输入不能为空", E_USER_WARNING); // 不一致
return false;
}
return true;
}
}
错误消息应该清晰、具体,包含足够的信息:
// 好的错误消息
trigger_error(
sprintf(
"数据库连接失败:主机=%s,端口=%d,错误=%s",
$host,
$port,
$errorMessage
),
E_USER_ERROR
);
// 不好的错误消息
user_error("连接失败", E_USER_ERROR);
根据问题的严重性选择合适的错误级别:
// 致命错误
trigger_error("无法访问关键资源", E_USER_ERROR);
// 警告
trigger_error("性能可能受影响", E_USER_WARNING);
// 信息性消息
trigger_error("操作完成", E_USER_NOTICE);
// 弃用警告
trigger_error("此方法将在下个版本移除", E_USER_DEPRECATED);
user_error()是trigger_error()的完全别名,两个函数在功能上没有任何区别。
关键要点:
user_error($msg, $type) ≡ trigger_error($msg, $type)user_error()在PHP 4.0.0中引入,trigger_error()在PHP 4.0.1中作为别名引入trigger_error()user_error()trigger_error()相对简单,可以使用批量替换