2017-07-06 66 views
2
class Param() { 
} 
class Subparam extends Param { 
} 

class Base { 

    function mymethod(Param a) { 
    } 

} 

class Sub extends Base { 

function mymethod(Subparam a) { 
} 

} 

如何做在PHP中,這會導致一個警告:Declaration should be compatible with Base->mymethod(a : \Param)協方差在PHP(OOP) - 在工作

我能做些什麼來防止這種情況,除了僅使用註釋?

+1

你真的不能。 –

回答

-1

可以利用接口:

interface Test { 
} 
class Param implements Test { 
} 
class Subparam extends Param implements Test { 
} 

class Base { 

    function mymethod(Test $a) { 
    } 

} 

class Sub extends Base { 

function mymethod(Test $a) { 
} 

} 
+0

這是如何指定'Sub :: mymethod()'只應該用'Param'對象來調用的? – Barmar

+0

發生錯誤。我改變了它:) –

+0

我仍然沒有看到這是如何使方法協變。 – Barmar

-1
class Param() { 
} 
class Subparam extends Param { 
} 

class Base { 

    function mymethod(a) { 
    // Remove the parameter type from the method declaration. 
    if (a !instanceof Param) { 
     throw new \Exception('Paramater type should be of 'Param.'); 
    } 

} 

class Sub extends Base { 

function mymethod(a) { 
} 

} 

這應該讓你關閉。