PHP命名空间

直接上代码:

namespace MyNamespace;
class Exception extends \Exception {}

$a = new Exception('error'); 
$b = new Exception('error'); 

var_dump($a instanceof Exception);
var_dump($b instanceof \Exception);

这个的执行结果为:
clipboard.png

求助一下大伙们,第二个为什么是 true的结果?

阅读 2.5k
3 个回答

OOP编程中继承问题
Exception继承于Exception,所有的Exception实例同时也是Exception的实例

$b 的类是 \MyNamespace\Exception, \MyNamespace\Exception 是 \Exception 的子类,所以当然为 true 啦!


补充:
我理解你可能需要的是 get_class()

var_dump(get_class($b) === 'MyNamespace\Exception');
class A {}
class B extends A {}

$b = new B();

因为B继承了A, 所以$b当然是可以视为是A的一个实例的, 并没有什么问题, 见:

http://php.net/manual/zh/lang...

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题