有没有办法让下面的代码有效?
public function my_function(My_Class $arg){ .... }
public class My_Sub_Class extends My_Class { ... }
//NOW
$my_object = new My_Sub_Class();
my_function($my_object);
我编辑了一些写错误
答案 0 :(得分:1)
public class My_Sub_Class extends My_Class() { }
应该是
public class My_Sub_Class extends My_Class { }
另外,我不确定$my_object = new My_Sub_Class(){ .... }
应该是什么。 My_Sub_Class
不是函数!
修复这些错误,向您的测试用例添加My_Class
的定义,并删除public
前缀(因为您的示例没有周围的类定义),我最终得到以下内容,{{ 3}}:
<?php
class My_Class {}
class My_Sub_Class extends My_Class {}
function my_function(My_Class $arg){ echo "my_function"; }
$my_object = new My_Sub_Class();
my_function($my_object);
?>
事实上,如果你无法获得“工作”的东西,请查看手册中你使用的每个功能。
答案 1 :(得分:0)
你的代码工作得很好(也就是说,将子类传递给具有超类类型提示的函数)。这是我的代码,已经过验证可以在PHP 5.3.3上运行:
<?php
class Foo {}
class Bar extends Foo {}
function quu(Foo $a) { return $a; }
$foo = new Foo();
$bar = new Bar();
var_dump(quu($foo));
var_dump(quu($bar));
当然,您的第二行和第三行有语法错误。但这与你的问题无关......
答案 2 :(得分:0)
由于子类扩展了父类,因此它必须具有父类的所有属性和方法。因此,您不必担心 - 您的函数也将接收并使用所有子类的对象。 第三行中有错误 - 在初始化对象后,您不需要大括号。