对不起,到目前为止,我还是PHP的新手,我的问题听起来有些荒谬,但我想知道Class / interface名称类型的Type声明的含义是什么?这是在PHP 5.0.0中发明的。我也在stackoverflow上进行了搜索,但是我没有找到有用的信息...在php.net文档中,有一些用于类类型声明的示例,但是我并不真正理解...
我对类类型声明的理解是: 该参数必须是给定类或接口名称的实例。而且我知道该变量的参数名称通常与该类的相同,当然该变量以美元符号开头并以小写字母开头。但我更了解http://php.net/manual/en/functions.arguments.php#functions.arguments.type-declaration
中列出的其他类型还有示例#7基本类类型声明
class C {}
class D extends C {}
// This doesn't extend C.
class E {}
function f(C $c) {
echo get_class($c)."\n";
}
f(new C);
f(new D);
f(new E);
C类为空,但是如果其中包含Code(例如某些属性和方法),那该怎么办?
还有返回类型声明:
所以请您帮我一下
public function test(): Class {}
我什么时候必须定义:和Class,它的目的是什么,它如何工作? 如果您可能还有一些示例链接,我也将很期待。
答案 0 :(得分:0)
阅读docs here。
它说功能测试必须返回Class的值(您的代码不正确,您应该指定一个有效的类,例如C,D或E
以下面的代码为例:
class A {}
class B {
public function test(): A {}
}
$b = new B;
$b->test();
它将引发错误:
致命错误:未捕获的TypeError:B :: test()的返回值必须是A的实例,没有返回
现在,如果您定义了正确的回报,那么它将起作用:
public function test(): A {
return new A;
}
$b = new B;
var_dump($b->test());
输出:
object(A)
答案 1 :(得分:0)
//here we can only check class declaration name.no property or method should be access for any other check
C类{
public $abc = "Tn million";
public function my_func(){
echo "hello";
}
}
D类扩展了C {}
//这不会扩展C。 E类{}
函数f(C $ c){
echo get_class($c)."\n";
}
f(新C); // C
f(new D); // D
f(new E); //致命错误:未捕获的TypeError:传递给f()的参数1必须是C的实例,给定的E的实例称为