优化很少。 在代码的可读性,可理解性和稳定性面前,微优化从来不是一个真正的好答案。
(我个人更喜欢instanceof,但选择是你的;))
主要区别在于可以使用instanceof直接使用类名
$ a instanceof MyClass
比...短
is_a($ a,MyClass :: class)
(好吧......这不是小事。)
instanceof(语言结构)和is_a之间的语法着色也很有用(对我而言)。 让功能颜色更大的操作。并且在if中单独使用,instanceof不需要更多的括号。
注意 :当然,您可以使用更短的直接字符串代替MyClass :: class:
is_a($ A'MyClass的')
但是在代码中使用直接字符串并不是一个好习惯。
如果您可以在简单字符串和类名称之间做出区分,则语法colloration更好,更有用。使用常量类名更改名称更容易。 特别是如果您使用带别名的命名空间。
那么,用is_a()?
同样的存在:可读性和可理解性。 (这是你的选择)特别是在使用时! 或者其他布尔运算符:is_a似乎对括号更实用。
if($ a AND(!is_a($ a,MyClass :: class)OR is_a($ a,MyOtherClass :: class)))
比以下更具可读性:
if($ a AND(!($ a instanceof MyClass)OR($ a inanceof MyOtherClass)))
另一个很好的理由是当你需要在函数中使用回调时。 (比如array_map ......)instanceof不是一个函数,它是一个语言结构,所以你不能用它作为回调。
在这些情况下,可能是有用的