您可以使用

instanceof:

if ($pdo instanceof PDO) {

// it's PDO

}

注意,你不能否定像!instanceof,所以你会改为:

if (!($pdo instanceof PDO)) {

// it's not PDO

}

此外,查看您的问题,您可以使用对象类型提示,这有助于强制要求,以及简化您的检查逻辑:

function connect(PDO $pdo = null)

{

if (null !== $pdo) {

// it's PDO since it can only be

// NULL or a PDO object (or a sub-type of PDO)

}

}

connect(new SomeClass()); // fatal error, if SomeClass doesn't extend PDO

类型化参数可以是必需的或可选的:

// required, only PDO (and sub-types) are valid

function connect(PDO $pdo) { }

// optional, only PDO (and sub-types) and

// NULL (can be omitted) are valid

function connect(PDO $pdo = null) { }

非类型参数允许通过显式条件的灵活性:

// accepts any argument, checks for PDO in body

function connect($pdo)

{

if ($pdo instanceof PDO) {

// ...

}

}

// accepts any argument, checks for non-PDO in body

function connect($pdo)

{

if (!($pdo instanceof PDO)) {

// ...

}

}

// accepts any argument, checks for method existance

function connect($pdo)

{

if (method_exists($pdo, 'query')) {

// ...

}

}

至于后者(使用method_exists),我有点混合在我看来。来自Ruby的人会发现respond_to?很熟悉,不管是好是坏。我个人写一个接口并执行一个正常的类型提示:

interface QueryableInterface

{

function query();

}

class MyPDO extends PDO implements QueryableInterface { }

function connect(QueryableInterface $queryable) { }

然而,这并不总是可行的;在此示例中,PDO对象不是有效的参数,因为基本类型不实现QueryableInterface。

还值得一提的是,PHP中的值具有类型,而不是变量。这很重要,因为null将失败一个instanceof检查。

$object = new Object();

$object = null;

if ($object instanceof Object) {

// never run because $object is simply null

}

当值变为null,缺少类型时,该值将丢失它的类型。

php如何检查对象的类型,如何在PHP中检查对象的特定类型相关推荐

  1. java对象数组排序_如何在Java中对对象数组进行排序?

    小编典典 你有两种方法可以使用Arrays实用程序类 实现一个Comparator并将数组与比较器一起传递给sort方法,该方法将其作为第二个参数. 在对象所属的类中实现Comparable接口,并将 ...

  2. 如何在JavaScript中检查变量是否为整数?

    本文翻译自:How to check if a variable is an integer in JavaScript? How do I check if a variable is an int ...

  3. 如何在 JavaScript 中检查数字是正数还是负数

    如何在 JavaScript 中检查数字是正数还是负数 前几天一个月薪35k的兄弟,给我推了一个人工智能学习网站,看了一段时间挺有意思的.包括语音识别.机器翻译等从基础到实战都有,很详细,分享给大家. ...

  4. 如何在Javascript中访问对象的第一个属性?

    本文翻译自:How to access the first property of an object in Javascript? Is there an elegant way to access ...

  5. scala 当前日期_如何在Scala中检查当前日期和时间?

    scala 当前日期 Scala is a general-purpose programming language, which is majorly used for data manipulat ...

  6. 如何在 Word 中检查语法、拼写?

    欢迎观看 Microsoft Word 教程,小编带大家学习 Microsoft Word 的使用技巧,了解如何在 Word 中检查语法.拼写. Word 使用下划线标记拼写.语法和风格问题. 按住 ...

  7. Microsoft Word 教程:如何在 Word 中检查语法、拼写?

    欢迎观看 Microsoft Word 教程,小编带大家学习 Microsoft Word 的使用技巧,了解如何在 Word 中检查语法.拼写. Word 使用下划线标记拼写.语法和风格问题. 按住 ...

  8. C++经典问题:如果对象A中有对象成员B,对象B没有默认构造函数,那么对象A必须在初始化列表中初始化对象B?

    对象成员特点总结: (1)实例化对象A时,如果对象A有对象成员B,那么先执行对象B的构造函数,再执行A的构造函数. (2)如果对象A中有对象成员B,那么销毁对象A时,先执行对象A的析构函数,再执行B的 ...

  9. java构造方法的签名_如何在 Java 中构造对象(学习 Java 编程语言 034)

    1. 构造器 Java 对象都是在堆中构造的. 先看看 Employee 类的构造器: public class Employee { private String name; private dou ...

最新文章

  1. 植树节特别活动:合种樟子松/华山松/云杉/胡杨
  2. Spring MVC 向前台页面传值-ModelAndView
  3. jvm系列(五):Java GC 分析
  4. 要运行python程序要安装什么_傲视天地
  5. mysql 取年月日 语句_MySQL学习从这里出发!
  6. 突发!联想被责令立即开展全面整改
  7. “/etc/profile“ 无法保存 E212: Can‘t open file for writing
  8. Atitit 反模式 黑名单 异常处理 反模式(antipatterns) 目录 1.1. 记录并抛出(log and throw) 1 1.2. 抛出异常基类(Throwing Excepti
  9. Visio 2003 精简版(简体中文,免激活)百度云链接
  10. 老年人计算机培训方案,老年人学电脑从新手到高手
  11. 公众号采集,公众号批量自动采集,微信公众号免费文章采集
  12. composer php中如何执行,composer怎么运行
  13. Java程序从编写到运行
  14. b站选择HTML5播放器,b站用什么播放器看片好?选择硬解还是软解?看本地视频首选哪一个?...
  15. 数据化决策-数据分析与高效经营1
  16. 解决单点故障 - 有状态服务的高可用
  17. 2020YKB西医综合全程班资料
  18. ubuntu 16.04升级python3后software updater打开错误
  19. Win10 64bit +VS2015+GPU版本MXNet+Tensorflow 1.3.0的安装
  20. 中国电化学分析设备市场行业需求与投资战略分析报告2022-2028年

热门文章

  1. ByteBuffer 转 InputStream
  2. metasploit-***测试工具
  3. Exp-00009错误解決
  4. 在DataGridView控件中一次显示出多个圆饼图的原始程序代码
  5. 大屏监控系统实战(13)-10分钟投票增量曲线制作(二)
  6. idea总结几个不错的插件
  7. Keychain的介绍和使用
  8. 对于超平面的理解[转载]
  9. 移动端列表以树的形式展示
  10. sql server 查询本周、本月所有天数的数据