您可以使用以下实例
:
if ($pdo instanceof PDO) {
}
但请注意,您不能否定 ,因此您应这样做:!instanceof
if (!($pdo instanceof PDO)) {
}
此外,查看您的问题,您可以使用对象类型提示,这有助于强制实施要求,并简化检查逻辑:
function connect(PDO $pdo = null)
{
if (null !== $pdo) {
}
}
connect(new SomeClass());
类型化参数可以是必需的,也可以是可选的:
function connect(PDO $pdo) { }
function connect(PDO $pdo = null) { }
非类型化参数允许通过显式条件实现灵活性:
function connect($pdo)
{
if ($pdo instanceof PDO) {
}
}
function connect($pdo)
{
if (!($pdo instanceof PDO)) {
}
}
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) {
}
当值变成 时,它失去了它的类型,缺少类型。null