有人能澄清这个PHP OOP概念吗

  • 本文关键字:OOP PHP php
  • 更新时间 :
  • 英文 :


假设我有一个类,这个类有一个方法:a.php

Class A{
public function AB(){
echo "Printing From AB method";
}
}

现在,在另一个文件中,我包含了这个类文件,在不创建对象的情况下,我可以访问AB((方法吗?就像我可以将这个类作为类型注入另一个函数中一样,如下所示:b.php

include a.php;
Class B{
public function CD(A $obj){
echo $obj->AB();
}
}

如果你的答案是肯定的,它将打印"从AB方法打印">然后你能解释为什么因为我没有用新关键字创建对象吗

由于变量类型是在方法参数声明(A$obj(中指定的,所以类B利用了类型提示PHP特性。
$b = new B();
$b->CD(new A()); // instance of A class is passed to method. "Printing From AB method" is printed
$b->CD(new XYZ()); // throws TypeError exception in PHP7 and recoverable fatal error in PHP5

让我们举一个例子,其中B函数的CD方法定义如下:

public function CD($obj){
echo $obj->AB();
}

在这个例子中,参数类型(A(被省略了,所以用户可以传递任何对象的实例。

$b = new B();
$b->CD(new A()); // everything is fine. "Printing From AB method" is printed
$b->CD(new XYZ()); // runtime error since script tries to invoke unknown AB() method on instance of XYZ class 

最新更新