2

如果我创建一个 PDO 实例然后调用 PDO->Quote('test') 它没有问题。

如果我查看 PDO Quote 方法的定义,它看起来像这样:

/**
 * Quotes a string for use in a query.
 * PDO::quote() places quotes around the input string (if required) and escapes special characters within the input string, using a quoting style appropriate to the underlying driver.
 *
 * @param string $string The string to be quoted.
 * @param int $parameter_type Provides a data type hint for drivers that have alternate quoting styles.
 *
 * return string
 */
function quote(string $string, int $parameter_type) {/* method implementation */}

请注意,参数实际上具有在方法签名、字符串和 int 中定义的类型。

现在,如果我创建这样的函数:

function Test(string $test) {
    return $test;
}

并尝试这样称呼它:

echo Test('test');

它失败并出现以下错误:

( ! ) Catchable fatal error: Argument 1 passed to Test() must be an instance of string, string given, called in [path_removed]TestTypeHinting.php on line 36 and defined in [path_removed]TestTypeHinting.php on line 2

为什么PDO可以做到,但我不能?

问候,

斯科特

4

2 回答 2

4

像 string 和 int 这样的简单标量类型不能用作类型提示。我认为您在 pdo 上看到的字符串是文档中人类的类型提示。http://php.net/manual/en/language.oop5.typehinting.php

世界变了

随着 PHP 7标量类型提示的引入,现在已经成为一件事。

于 2013-05-20T06:37:14.930 回答
1

它是文档和真实代码。阅读类型提示

类型提示不能用于标量类型,例如 int 或 string

但是实现标量类型提示有一些进展。

您可以添加 phpdoc 来记录您的功能。

/**
 * Test function
 * @param string $test
 * @return string
 */
function Test($test) {
    return $test;
}

另请阅读如何阅读函数定义

于 2013-05-20T06:36:37.423 回答