我有一个PHP接口
interface IDummy{
public function DoSomething();
}
我有另一个实现此接口的类。
class Dummy implements IDummy{
public function DoSomething(){
}
如何在PHP中键入将Dummy Object强制转换为IDummy,以便我可以将其称为
$dum = new Dummy();
$instance = (IDummy)$dum;
$instance->DoSomething();
我可以在PHP中执行此操作吗?
谢谢和问候 Abishek R Srikaanth
答案 0 :(得分:4)
演员完全没必要。它会起作用。
如果您使用各种类型的提示功能之一检查虚拟对象,则它们将被视为IDummy的实例。
这样做......不需要演员:
interface I {
public function foo();
};
class A implements I {
public function foo() { }
}
function test(I $obj) {
$obj->foo();
}
$a = new A();
test($a);
答案 1 :(得分:3)
如果班级Dummy
已经实施interface IDummy
,则无需将$dum
投射到IDummy
- 只需调用方法DoSomething()
。
interface IDummy
{
public function doSomething();
}
class Dummy implements IDummy
{
public function doSomething()
{
echo 'exists!';
return;
}
}
$dummy = new Dummy();
$dummy->doSomething(); // exists!
答案 2 :(得分:0)
代码应该只是:
$class = new ClassName;
$class->yourMethod();
正如@konforce指出的那样,不需要进行类型转换。您可能想要检查PHP method_exists()函数http://php.net/manual/en/function.method-exists.php
。
答案 3 :(得分:0)
嗯,这可能很有趣,请参阅有关此问题的java功能。
interface I {
public function foo();
};
class A implements I {
public function foo() { echo 'This should be accessible.'; }
public function baz() { echo 'This should not be available.'; }
}
$dum = new A();
$instance = (I) $dum;
$instance->foo(); // this should work
$instance->baz() // should not work
注意:此代码抛出错误。看来你不能像那样投射界面。在java中是可能的。