首页 > 技术文章 > 使用命名空间:后备全局函数/常量 ¶

hnbiao 2017-07-21 14:55 原文

<?php 
namespace alonephp\base;
/**
*自定义错误类
*主要为了接管php默认的错误
*/
class Error
{
	//设置用户自定义的错误处理函数
	public function set_error(){
		return  set_error_handler(array($this,'my_error'));
	}

	//自定义错误
	public function my_error($errno,$errstr,$errfile,$errline,$errcontext){
		switch ($errno) {
			case E_USER_ERROR:
				echo "这是个致命错误:[$errno] $errstr<br/>\n";
				echo "错误行:$errline<br/>\n";
				echo "错误文件为:$errfile<br/>\n";
				echo "PHP版本号: " . PHP_VERSION . " (" . PHP_OS . ")<br />\n";
				exit(1);
				break;
			case E_USER_WARNING:
				echo "这是个警告错误:[$errno] $errstr<br/>\n";
				echo "错误行:$errline<br/>\n";
				echo "错误文件为:$errfile<br/>\n";
				echo "PHP版本号 " . PHP_VERSION . " (" . PHP_OS . ")<br />\n";
				exit(1);
				break;
			case E_USER_NOTICE:
				echo "这是个notice错误:[$errno] $errstr<br/>\n";
				echo "错误行为:$errline<br/>\n";
				echo "错误文件为:$errfile<br/>\n";
				echo "PHP版本号 " . PHP_VERSION . " (" . PHP_OS . ")<br />\n";
				exit(1);
				break;
			case E_NOTICE:
				echo "这是个notice错误:[$errno] $errstr<br/>\n";
				echo "错误行:$errline<br/>\n";
				echo "错误文件为:$errfile<br/>\n";
				echo "PHP版本号: " . PHP_VERSION . " (" . PHP_OS . ")<br />\n";
				exit(1);
				break;
			default:
				 echo "Unknown error type: [$errno] $errstr<br />\n";
		        break;
		}
	}


}

//异常类
class Myexception extends \Exception{
	//设置用户自定义的异常处理函数 
	public function set_exception(){
		return set_exception_handler(array($this,'my_exception'));
	}

	public function my_exception($exception){
		echo "未捕获的异常: " , $exception->getMessage(), "\n";
	}
}

$Error=new Error();
$Error->set_error();
$exc=new Myexception();
$exc->set_exception();

throw new Myexception('变量没有定义');
echo "Not Executed\n";
// print_r($test);

// trigger_error("error",)


另外:官方是这样解释的

使用命名空间:后备全局函数/常量

(PHP 5 >= 5.3.0, PHP 7)

在一个命名空间中,当 PHP 遇到一个非限定的类、函数或常量名称时,它使用不同的优先策略来解析该名称。类名称总是解析到当前命名空间中的名称。因此在访问系统内部或不包含在命名空间中的类名称时,必须使用完全限定名称,例如:

Example #1 在命名空间中访问全局类

<?php
namespace A\B\C;
class Exception extends \Exception {}

$a = new Exception('hi'); // $a 是类 A\B\C\Exception 的一个对象
$b = new \Exception('hi'); // $b 是类 Exception 的一个对象

$c = new ArrayObject// 致命错误, 找不到 A\B\C\ArrayObject 类
?>

对于函数和常量来说,如果当前命名空间中不存在该函数或常量,PHP 会退而使用全局空间中的函数或常量。 For functions and constants, PHP will fall back to global functions or constants if a namespaced function or constant does not exist.

 

推荐阅读