类型为类/接口名称的类型声明是什么意思?

时间:2018-07-16 17:23:09

标签: php

对不起,到目前为止,我还是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,它的目的是什么,它如何工作? 如果您可能还有一些示例链接,我也将很期待。

2 个答案:

答案 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的实例称为