php如何检查对象的类型,如何在PHP中检查对象的特定类型
您可以使用
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中检查对象的特定类型相关推荐
- java对象数组排序_如何在Java中对对象数组进行排序?
小编典典 你有两种方法可以使用Arrays实用程序类 实现一个Comparator并将数组与比较器一起传递给sort方法,该方法将其作为第二个参数. 在对象所属的类中实现Comparable接口,并将 ...
- 如何在JavaScript中检查变量是否为整数?
本文翻译自:How to check if a variable is an integer in JavaScript? How do I check if a variable is an int ...
- 如何在 JavaScript 中检查数字是正数还是负数
如何在 JavaScript 中检查数字是正数还是负数 前几天一个月薪35k的兄弟,给我推了一个人工智能学习网站,看了一段时间挺有意思的.包括语音识别.机器翻译等从基础到实战都有,很详细,分享给大家. ...
- 如何在Javascript中访问对象的第一个属性?
本文翻译自:How to access the first property of an object in Javascript? Is there an elegant way to access ...
- scala 当前日期_如何在Scala中检查当前日期和时间?
scala 当前日期 Scala is a general-purpose programming language, which is majorly used for data manipulat ...
- 如何在 Word 中检查语法、拼写?
欢迎观看 Microsoft Word 教程,小编带大家学习 Microsoft Word 的使用技巧,了解如何在 Word 中检查语法.拼写. Word 使用下划线标记拼写.语法和风格问题. 按住 ...
- Microsoft Word 教程:如何在 Word 中检查语法、拼写?
欢迎观看 Microsoft Word 教程,小编带大家学习 Microsoft Word 的使用技巧,了解如何在 Word 中检查语法.拼写. Word 使用下划线标记拼写.语法和风格问题. 按住 ...
- C++经典问题:如果对象A中有对象成员B,对象B没有默认构造函数,那么对象A必须在初始化列表中初始化对象B?
对象成员特点总结: (1)实例化对象A时,如果对象A有对象成员B,那么先执行对象B的构造函数,再执行A的构造函数. (2)如果对象A中有对象成员B,那么销毁对象A时,先执行对象A的析构函数,再执行B的 ...
- java构造方法的签名_如何在 Java 中构造对象(学习 Java 编程语言 034)
1. 构造器 Java 对象都是在堆中构造的. 先看看 Employee 类的构造器: public class Employee { private String name; private dou ...
最新文章
- 植树节特别活动:合种樟子松/华山松/云杉/胡杨
- Spring MVC 向前台页面传值-ModelAndView
- jvm系列(五):Java GC 分析
- 要运行python程序要安装什么_傲视天地
- mysql 取年月日 语句_MySQL学习从这里出发!
- 突发!联想被责令立即开展全面整改
- “/etc/profile“ 无法保存 E212: Can‘t open file for writing
- Atitit 反模式 黑名单 异常处理 反模式(antipatterns) 目录 1.1. 记录并抛出(log and throw)	1 1.2. 抛出异常基类(Throwing Excepti
- Visio 2003 精简版(简体中文,免激活)百度云链接
- 老年人计算机培训方案,老年人学电脑从新手到高手
- 公众号采集,公众号批量自动采集,微信公众号免费文章采集
- composer php中如何执行,composer怎么运行
- Java程序从编写到运行
- b站选择HTML5播放器,b站用什么播放器看片好?选择硬解还是软解?看本地视频首选哪一个?...
- 数据化决策-数据分析与高效经营1
- 解决单点故障 - 有状态服务的高可用
- 2020YKB西医综合全程班资料
- ubuntu 16.04升级python3后software updater打开错误
- Win10 64bit +VS2015+GPU版本MXNet+Tensorflow 1.3.0的安装
- 中国电化学分析设备市场行业需求与投资战略分析报告2022-2028年