2017-05-30 29 views
0

我有常量的类。我怎么可以确定actionWithParams()会得到当前的类常量?现在,我得到错误“的实例”:如何解决调用方法时的错误实例?

<?php 
class MyClass 
{ 
    const PARAM_1 = 1; 
    const PARAM_2 = 2; 

    protected $plans; 


    // .. 

    public function actionWithParam(MyClass $param){ 
     //... 
    } 
} 

$obj = new MyClass(); 
$obj = $obj->actionWithParam(MyClass::PARAM_1); 
+0

你不能。同样'MyClass $ param'意味着'$ params'必须是'MyClass'类的一个对象。 – AbraCadaver

回答

1

你传递一个整数,而不是一个的MyClass实例。

MyClass::PARAM_1是一个整数,这就是你传递给actionWithParam()的东西。既然你已经键入了这个方法,它需要它的参数是MyClass类的一个“实例”,这个整数显然不是。只要取消“MyClass”暗示,你就不应该再犯这个错误了。

虽然有人要问,为什么你要将一个类的常量传递给该类中的方法?

+0

_One不得不问 - 为什么要将类常量传递给该类中的方法?_这很常见,为什么要将它们定义为全局常量? 'PDO :: FETCH_ASSOC'等等。 – AbraCadaver

+0

我知道,删除typeHint将起作用。我想也许有办法指出哪些类常量需要使用。 – Fatas

1

你的方法定义typehints参数是这样的:

public function actionWithParam(MyClass $param){ 

这意味着$param必须是MyClass的实例,但你传递MyClass::PARAM_1,这是一个整数。只是删除typehint:

public function actionWithParam($param){ 

或者,您可以typehint整数参数:

public function actionWithParam(int $param){ 

而且,你可能不希望这样做:

$obj = $obj->actionWithParam(MyClass::PARAM_1); 

这将覆盖您的$obj对象实例与该方法返回的任何值。

相关问题