这两者有什么区别:
use Exception;
use \Exception;
Run Code Online (Sandbox Code Playgroud)
或那些:
use Foo\Bar;
use \Foo\Bar;
Run Code Online (Sandbox Code Playgroud)
该手册说:
请注意,对于名称空间名称(包含名称空间分隔符的完全限定名称空间名称,例如Foo\Bar而不是全局名称,例如FooBar),前导反斜杠是不必要的,不允许,因为导入名称必须是完全限定的,并且不会相对于当前名称空间进行处理.
但我并不是真的理解这一点,因为所有上述变种都有效,即它绝对不是"不允许".
看看zend_do_use显示,is_global(设置,当有前导反斜杠时)仅用于以下情况中的警告:
namespace {
use Exception;
}
Run Code Online (Sandbox Code Playgroud)
这告诉我:"具有非复合名称的'使用声明'异常'无效".(虽然做同样的事情use \Exception会产生很小的影响,但不会发出警告.)
那么:我错过了什么吗?实际上有什么区别吗?
如果我试图从我的S3存储桶中获取一个不存在的对象,那么Amazon PHP SDK 2会给我一个非常难看的错误.方便我,但对最终用户没有任何意义......
例如:
$s3 = $aws->get('s3');
$result = $s3->getObject(array(
'Bucket' => 'my bucket',
'Key' => 'path/to/file'
));
Run Code Online (Sandbox Code Playgroud)
错误:
致命错误:未捕获的Aws\S3\Exception\NoSuchKeyException:AWS错误代码:NoSuchKey,状态代码:404,AWS请求ID:xxxxxxxxxxxxx,AWS错误类型:客户端,AWS错误消息:指定的密钥不存在.在第89行的AWS/vendor/aws/aws-sdk-php/src/Aws/Common/Exception/NamespaceExceptionFactory.php中抛出
有没有办法可以确定是否存在错误并打印出有意义的消息而不是上述消息?