在PHP中进行类型转换

时间:2011-06-07 00:11:51

标签: php oop

我有一个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

4 个答案:

答案 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中是可能的。