如何在PHP中明确地键入 - 我将接收到的对象作为函数参数?
只有当它是一个有效的例子时,这才能满足我的要求:
function example(object $argument)
{
$argument->property = 'something';
}
(后者给我“参数必须是对象的实例,给定的实例”)
is_object()
不构成类型检查,因为我希望程序失败并且如果没有提供对象则会很难。
On可以说我可以做assert(is_object($argument))
但是可以关闭断言,从而避免这种类型的检查。抛出任何条件表达式抛出异常都不会使它变得更好。
答案 0 :(得分:2)
TL; DR - 根据the manual,这样的提示不是(还可能?)。
您可以使用stdClass
提示来测试通用对象:
function example(\stdClass $argument)
{
echo $argument->foo;
}
或者让所有类派生自您自己的基类或实现一些接口:
function example(MyBaseClass $argument)
{
}
或者,只需使用is_object()
手动检查变量类型:
function example($argument)
{
if (!is_object($argument)) {
trigger_error("Invalid argument", E_USER_ERROR);
// or: throw new InvalidArgumentException();
}
// it's an object
}
也就是说,检查任何对象并不能为整个应用程序提供太多信息;一个明确的测试类将是要走的路。
答案 1 :(得分:1)
检查函数参数称为类型提示:
class ConcreteClass {...}
function(ConcreteClass obj) {...}
这通常用于检查:
if ($obj instanceof ConcreteClass) {
//do stuff
}
或
if (is_object($obj)) {
//do stuff
}
我更喜欢类型提示和instanceof。